I napotkał następujący w kodzie Scala:Co ten import ma dokładnie na Scali?
class MyClass { ... val a = new A; import a._ }
Co dokładnie val a = new A; import a._
oznacza?
I napotkał następujący w kodzie Scala:Co ten import ma dokładnie na Scali?
class MyClass { ... val a = new A; import a._ }
Co dokładnie val a = new A; import a._
oznacza?
Importuje metody i zmienne obiektu. Więc jeśli chcesz zadzwonić pod numer a.foo()
, możesz po prostu zadzwonić pod numer foo()
.
Oznacza to, że wszystkie metody i zmienne obiektu a
obiektu typu A
są teraz dostępne w tym bloku (zakresie) bez wyraźnego wymieniania a
. Więc jeśli A
ma metodę bar()
można teraz powiedzieć:
bar()
zamiast
a.bar()
ale tylko w zakresie, gdzie import
jest zdefiniowana.
Wyjaśnijmy to coś należy zapoznać się z:
println("Hello world")
Pytanie brzmi: dlaczego to działa? Nie ma obiektu o nazwie println
za pomocą metody apply
, która jest zwykłym wyjaśnieniem kodu, który wygląda tak. Cóż, jak to się dzieje, powyższy kod jest naprawdę to robi:
Predef.println("Hello world")
Innymi słowy, println
to metoda na obiekcie scala.Predef
. Jak więc możesz go użyć tak jak powyżej? No, tak:
Importowanie zawartości stabilny odniesienia (czyli nie var
lub def
) sprawi, że jej metody dostępne bez konieczności poprzedzić je reference.
.
To również sprawia żadnych implicits zdefiniowane wewnątrz niej dostępne, co jest jak konwersje niejawne zdefiniowane wewnątrz scala.Predef
są udostępniane, a także - Scala importuje zawartość java.lang
, scala
i scala.Predef
(w tej kolejności, więc te ostatnie przesłanianie wcześniejsze).
+1, ponieważ wspomniano o _stabilnym odnośniku_ –