我在 Scala 代码中遇到了以下问题:
我的班级{
...
val a = 新 A;导入一个._
}
究竟是什么val a = new A; import a._意思?
它导入对象的方法和变量。所以如果你想打电话a.foo(),你可以打电话foo()。
这意味着a对象A类型的所有方法和变量现在都可以在此块(范围)中使用,而无需明确提及a. 因此,如果A有一种bar()方法,您现在可以说:
bar()
代替
a.bar()
但仅限于定义的范围内import。
让我们用您应该熟悉的东西来解释这一点:
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(按此顺序,因此后者会覆盖前面的内容)。