15

我在 Scala 代码中遇到了以下问题:

我的班级{
  ...
  val a = 新 A;导入一个._

}

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

4

3 回答 3

15

它导入对象的方法和变量。所以如果你想打电话a.foo(),你可以打电话foo()

于 2012-05-10T15:27:24.217 回答
9

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

bar()

代替

a.bar()

但仅限于定义的范围内import

于 2012-05-10T15:28:08.863 回答
7

让我们用您应该熟悉的东西来解释这一点:

println("Hello world")

问题是:为什么会这样?没有println使用apply方法调用的对象,这是对看起来像这样的代码的通常解释。好吧,碰巧的是,上面的代码确实是这样做的:

Predef.println("Hello world")

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

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

导入稳定引用的内容 (即,不是 avar或 a def)将使其方法可用,而不必在它们前面加上reference..

它还使在其中定义的任何隐式都可用,这就是使内部定义的隐式转换scala.Predef也可用的方式——Scala 导入java.lang,scala和的内容scala.Predef(按此顺序,因此后者会覆盖前面的内容)。

于 2012-05-10T17:35:06.883 回答