2017-12-31 38 views
2

Das könnte eine dumme Frage sein, aber ich bin ganz neu in Kotlin.Warum benötigt die Kotlin-Druckanweisung keine Bereichsdefinition?

In Java ist die typische print-Anweisung ist:

System.out.println("Goodbye cruel world!"); 

jedoch in Kotlin, können wir nur schreiben:

println("Kotlin is weird but good") 

Wie Kotlin hier um den Umfang Klärung bekommen? Es ist nicht wie println ist ein Sprachkonstrukt in Kotlin (oder ist es?). Fehle ich etwas Offensichtliches hier? Gibt es hier eine Art implizite Import-Aussage?

Beachten Sie, dass println hier nur ein Beispiel ist; Es gibt viele andere ähnliche Fälle in Kotlin.

Antwort

3

Kotlin unterstützt top level functions, und println ist einfach als eins deklariert, können Sie seine Quelle here sehen.

Diese können ohne Qualifikationsmerkmale verwendet werden, wenn das Paket importiert wird, und die grundlegenden Kotlin-Pakete sind imported by default.

3

Eine Reihe von Paketen wird standardmäßig in jede Kotlin-Datei importiert. Eine Liste dieser Pakete finden Sie im Referenzhandbuch unter Default Imports.

Einer von ihnen ist kotlin.io.*, der die println Funktion enthält. Beachten Sie, dass * alle zugänglichen Inhalte importiert. public, der Standardwert visibility modifier für Top-Level-Elemente, ist in diesem Import enthalten.

Sie können dies entweder bestätigen die Kotlin REPL und Eingabe:

>>> kotlin.io.println("Hello") 

oder es in einer .kts Datei setzen und es mit kotlinc -script filename Ausführung.

Andere Funktionen, Klassen usw. aus der Liste der Standardimporte können ebenfalls auf ähnliche Weise verwendet werden.

0

Es ist interessant zu wissen, dass

println() 

wird, sind

System.out.println(); 

Einige Pakete der zu einem Aufruf von Java kompilierten in jede Kotlin standardmäßig Datei importiert, von denen kotlin.io.* ist. Dort werden die println Funktionen definiert als Top-Level-Funktionen, z.B .:

/** Prints the given message and newline to the standard output stream. 
*/ 
@kotlin.internal.InlineOnly 
public inline fun println(message: Any?) { 
    System.out.println(message) 
} 

Als Ergebnis müssen Sie nicht einen „Rahmen“ definieren, wie Sie es und zusätzliche Einfuhr genannt wird ebenfalls nicht erforderlich.

Verwandte Themen