我在Scala代码中遇到以下内容:
class MyClass { ... val a = new A; import a._ }
val a = new A; import a._
究竟是什么意思?
答案 0 :(得分:14)
它导入对象的方法和变量。因此,如果您想致电a.foo()
,则可以改为拨打foo()
。
答案 1 :(得分:9)
这意味着a
类型的A
对象的所有方法和变量现在都可以在此块(范围)中使用,而无需明确提及a
。因此,如果A
有bar()
方法,您现在可以说:
bar()
而不是
a.bar()
但仅限于定义import
的范围内。
答案 2 :(得分:6)
让我们用你应该熟悉的东西解释一下:
println("Hello world")
问题是:为什么这样做?没有一个名为println
的对象带有apply
方法,这是代码的通常解释。好吧,正如它发生的那样,上面的代码实际上是这样做的:
Predef.println("Hello world")
换句话说,println
是对象scala.Predef
上的一种方法。那么,你怎么能像上面那样使用它呢?好吧,像这样:
import scala.Predef._
println("Hello world")
导入稳定参考的内容(即,不是var
或def
)将使其方法可用,而无需使用{{1}作为前缀}。
它还可以使其中定义的任何隐含可用,这也是reference.
中定义的隐式转换也可用的方式 - Scala导入scala.Predef
,java.lang
的内容和scala
(按此顺序,所以后者覆盖了之前的那些)。