在SBT / Windows 10下使用Scala 2.12.0-M3,我希望这段代码能够编译和打印" 1"但是Scala抱怨没有在具有非ASCII名称的包对象下找到变量。
(1)
package パッケージ
package object パッケージ {
val a = 1
}
(2)
package second
import パッケージ._
object Example extends App {
println(a)
}
这是编译器中的错误吗?其他人可以在另一个平台上重现这个问题吗?
答案 0 :(得分:3)
这段代码无法编译,这看起来是正确的。
在包Y中声明包对象X时,意味着X位于Y中。
println(パッケージ.a)
会奏效。为了说清楚,你的第二个来源的重写版本:
package second
object Example extends App {
println(パッケージ.パッケージ.a)
}
现在假设你有包x
,我们想要创建一个包对象y
,其完全限定名称为x.y
,换句话说,该对象将驻留内部 x
:
package x
package object y
现在,从“root”包中,如果我们想引用y
,我们需要import x
或使用它的完全限定名x.y
。
您的原始代码有点令人困惑,因为您有两个包同名,一个内另一个,内部代码发生成为一个包对象。