Funktionstasten in Karten
Dieser Artikel untersucht die Einschränkungen bei der Verwendung von Funktionen als Kartentasten in der Programmiersprache Go.
Das Problem
Betrachten Sie den folgenden hypothetischen Go-Code:
type Action func(int) func test(a int) { } func test2(a int) { } func main() { x := map[Action]bool{} x[test] = true x[test2] = false }
Wenn Sie versuchen, diesen Code zu kompilieren, wird eine Fehlermeldung angezeigt, die darauf hinweist, dass der Kartenschlüssel ungültig ist Typ Aktion.“
Die Antwort
Die Go-Sprachspezifikation verbietet ausdrücklich die Verwendung von Funktionen, Karten und Slices als Kartenschlüssel. Konkret heißt es in der Spezifikation:
„Die Vergleichsoperatoren == und != müssen für Operanden des Schlüsseltyps vollständig definiert sein; daher darf der Schlüsseltyp keine Funktion, Map oder Slice sein.“
Diese Einschränkung besteht, da die Gleichheitsvergleichsoperatoren (== und !=) für den Schlüsseltyp genau definiert sein müssen. Funktionen, Maps und Slices sind keine geeigneten Schlüsseltypen, da ihr Gleichheitsvergleich nicht vollständig definiert ist.
Schlussfolgerung
Obwohl es verlockend sein kann, Funktionen als Map-Schlüssel zu verwenden , ist in Go aufgrund der Notwendigkeit klar definierter Gleichheitsvergleiche nicht zulässig. Daher sollten Sie als Map-Schlüssel andere geeignete Typen wie Strings, Integer oder Strukturen verwenden.
Das obige ist der detaillierte Inhalt vonWarum können Funktionen in Go nicht als Kartenschlüssel verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!