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

Mic*_*ael 13 syntax import scala

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

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

}

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

sep*_*p2k 14

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


Tom*_*icz 9

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

bar()
Run Code Online (Sandbox Code Playgroud)

代替

a.bar()
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*ral 6

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

println("Hello world")
Run Code Online (Sandbox Code Playgroud)

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

Predef.println("Hello world")
Run Code Online (Sandbox Code Playgroud)

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

import scala.Predef._
println("Hello world")
Run Code Online (Sandbox Code Playgroud)

导入稳定引用的内容 (即,不是a var或a def)将使其方法可用,而不必使用它们作为前缀reference..

这也使得它里面定义的任何可用的implicits,这是怎么里面定义的隐式转换scala.Predef是可用,以及-斯卡拉进口的内容java.lang,scala以及scala.Predef(按照这个顺序,所以后面的一些覆盖早期的).