Что именно означает этот импорт в Scala?

Я столкнулся со следующим в коде Scala:

class MyClass {
  ...
  val a = new A; import a._

}

Что именно означает val a = new A; import a._ ?


person Michael    schedule 10.05.2012    source источник


Ответы (3)


Он импортирует методы и переменные объекта a. Поэтому, если вы хотите позвонить a.foo(), вы можете просто позвонить foo().

person sepp2k    schedule 10.05.2012

Это означает, что все методы и переменные объекта a типа A теперь доступны в этом блоке (области действия) без явного упоминания a. Итак, если у A есть метод bar(), теперь вы можете сказать:

bar()

вместо

a.bar()

но только в рамках, где определено import.

person Tomasz Nurkiewicz    schedule 10.05.2012

Давайте объясним это чем-то, с чем вы должны быть знакомы:

println("Hello world")

Вопрос: почему это работает? Нет объекта с именем println с методом apply, что является обычным объяснением кода, который выглядит так. Ну, так получилось, что приведенный выше код действительно делает это:

Predef.println("Hello world")

Другими словами, println — это метод объекта scala.Predef. Итак, как вы можете использовать его, как указано выше? Ну вот так:

import scala.Predef._
println("Hello world")

Импорт содержимого стабильной ссылки (т. е. не var или def) сделает его методы доступными без префикса reference..

Он также делает доступными любые неявные преобразования, определенные внутри него, и именно так становятся доступными неявные преобразования, определенные внутри scala.Predef — Scala импортирует содержимое java.lang, scala и scala.Predef (в таком порядке, поэтому последние переопределяют более ранние) .

person Daniel C. Sobral    schedule 10.05.2012