这个导入在Scala中究竟意味着什么?

时间:2012-05-10 15:24:53

标签: scala syntax import

我在Scala代码中遇到以下内容:

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

}

val a = new A; import a._究竟是什么意思?

3 个答案:

答案 0 :(得分:14)

它导入对象的方法和变量。因此,如果您想致电a.foo(),则可以改为拨打foo()

答案 1 :(得分:9)

这意味着a类型的A对象的所有方法和变量现在都可以在此块(范围)中使用,而无需明确提及a。因此,如果Abar()方法,您现在可以说:

bar()

而不是

a.bar()

但仅限于定义import的范围内。

答案 2 :(得分:6)

让我们用你应该熟悉的东西解释一下:

println("Hello world")

问题是:为什么这样做?没有一个名为println的对象带有apply方法,这是代码的通常解释。好吧,正如它发生的那样,上面的代码实际上是这样做的:

Predef.println("Hello world")

换句话说,println是对象scala.Predef上的一种方法。那么,你怎么能像上面那样使用它呢?好吧,像这样:

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

导入稳定参考的内容(即,不是vardef)将使其方法可用,而无需使用{{1}作为前缀}。

它还可以使其中定义的任何隐含可用,这也是reference.中定义的隐式转换也可用的方式 - Scala导入scala.Predefjava.lang的内容和scala(按此顺序,所以后者覆盖了之前的那些)。