我在 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
(按此顺序,因此后者会覆盖前面的内容)。