Da Java (und daher Kotlin) separate Namespaces für Felder und Methoden verwendet, benötigen Sie %code% , um Mehrdeutigkeiten zu vermeiden. Beispiel:
%Vor% Kotlin docs erklärte, dass es Funktionen höherer Ordnung unterstützt. Warum würde die Sprache sogar eine ::function
-Syntax benötigen, wenn eine Funktion der obersten Ebene als Argument übergeben wird?
Gegeben:
%Vor%Warum nicht einfach
%Vor%Mehr zur Funktionssyntax hier .
Kotlin Sprachdesign versucht, mehrdeutige Situationen zu vermeiden, in denen eine Abwesenheit von etwas sowohl korrekte als auch falsche Syntax zur gleichen Zeit sein könnte. Zum Beispiel, wenn Sie die vorgeschlagene Syntax erlaubt haben:
%Vor% Das ::
ist ein klares Signal für die Absicht. Aus diesem Grund erhalten Sie nur einen Fehler in der isOdd
-Fall, weil Sie jetzt Möglichkeiten haben, die nicht überlappen:
Deshalb vermeidet Kotlin Dinge, die zu mehrdeutigen Zuständen führen. Ihre Augen können das Problem schnell aufgreifen, genauso wie die IDE und die statische Analyse, genauso wie der Compiler. Wenn Sie beginnen, diese lockere Syntax zuzulassen, werden Sie in kompoundierte Ambiguitäten geraten, etwa bei der Verwendung als Infix-Funktionen und so weiter. Sprachdesign ist komplizierter als "Oh, lassen Sie uns sie weniger Buchstaben eingeben", weil die Komplexitätsmatrix viel größer ist, als Sie sich vorstellen, wenn Sie nur einen Anwendungsfall betrachten und alle anderen ignorieren.
Warum die oben genannte Antwort falsch ist:
Die aktuell akzeptierte Antwort besagt, dass dies ein Namespace-Problem ist, das nicht korrekt ist. In diesem Beispiel verwenden sie:
%Vor% Und behaupten, dass es wegen des Namespacings ohne die ::
funktioniert. Es funktioniert tatsächlich, weil das bereits eine Funktionsreferenz ist und als Funktionsreferenz deklariert wurde und daher kein Operator benötigt wird, um es zu einer Funktionsreferenz . Die Funktion ist jedoch keine Referenz. Es ist eine Funktion. Es benötigt einen Operator ::
, um es in einen Verweis auf die Funktion zu konvertieren, was erforderlich ist, wenn es als Prädikat für die Methode filter
verwendet wird.
Die Behauptung in dieser Antwort ist irreführend und unwahr.
Kotlin docs erklärte, dass es Funktionen höherer Ordnung unterstützt. Warum würde die Sprache sogar eine ::
-Syntax benötigen, wenn eine Funktion der obersten Ebene als Argument übergeben wird?
Gegeben:
%Vor%Warum nicht einfach
%Vor%Mehr zur Funktionssyntax hier .
Kotlin Sprachdesign versucht, mehrdeutige Situationen zu vermeiden, in denen eine Abwesenheit von etwas sowohl korrekte als auch falsche Syntax zur gleichen Zeit sein könnte. Zum Beispiel, wenn Sie die vorgeschlagene Syntax erlaubt haben:
%Vor%Das %code% ist ein klares Signal für die Absicht. Aus diesem Grund erhalten Sie nur einen Fehler in der %code% -Fall, weil Sie jetzt Möglichkeiten haben, die nicht überlappen:
%Vor%Deshalb vermeidet Kotlin Dinge, die zu mehrdeutigen Zuständen führen. Ihre Augen können das Problem schnell aufgreifen, genauso wie die IDE und die statische Analyse, genauso wie der Compiler. Wenn Sie beginnen, diese lockere Syntax zuzulassen, werden Sie in kompoundierte Ambiguitäten geraten, etwa bei der Verwendung als Infix-Funktionen und so weiter. Sprachdesign ist komplizierter als "Oh, lassen Sie uns sie weniger Buchstaben eingeben", weil die Komplexitätsmatrix viel größer ist, als Sie sich vorstellen, wenn Sie nur einen Anwendungsfall betrachten und alle anderen ignorieren.
Warum die oben genannte Antwort falsch ist:
Die aktuell akzeptierte Antwort besagt, dass dies ein Namespace-Problem ist, das nicht korrekt ist. In diesem Beispiel verwenden sie:
%Vor%Und behaupten, dass es wegen des Namespacings ohne die %code% funktioniert. Es funktioniert tatsächlich, weil das bereits eine Funktionsreferenz ist und als Funktionsreferenz deklariert wurde und daher kein Operator benötigt wird, um es zu einer Funktionsreferenz . Die Funktion ist jedoch keine Referenz. Es ist eine Funktion. Es benötigt einen Operator %code% , um es in einen Verweis auf die Funktion zu konvertieren, was erforderlich ist, wenn es als Prädikat für die Methode %code% verwendet wird.
Die Behauptung in dieser Antwort ist irreführend und unwahr.
Da Java (und daher Kotlin) separate Namespaces für Felder und Methoden verwendet, benötigen Sie %code% , um Mehrdeutigkeiten zu vermeiden. Beispiel:
%Vor%Tags und Links kotlin