我在访问根包中定义的对象时遇到问题。如果我将所有代码都放在一个文件中,则可以正常工作,但是当我将其拆分为两个文件时,就无法通过编译器。
这很好用:
全部称为packages.scala
的一个文件:
object Foo
val name = "Brian"
}
package somepackage {
object Test extends App {
println(Foo.name)
}
}
见证:
$ scalac packages.scala
$ scala -cp . somepackage.Test
Brian
但是如果我将代码分成两个文件:
packages.scala
object Foo {
val name = "Brian"
}
packages2.scala
package somepackage {
object Test extends App {
println(Foo.name)
}
}
全部失败:
$ scalac packages.scala packages2.scala
packages2.scala:3: error: not found: value Foo
所以我尝试将对Foo
的引用设为绝对:
...
println(_root_.Foo.name)
...
但是那也不起作用:
$ scalac packages.scala packages2.scala
packages2.scala:3: error: object Foo is not a member of package <root>
如果Foo
不是根包的成员,那么是]在哪里?
我在访问根包中定义的对象时遇到问题。如果我将所有代码都放在一个文件中,则可以正常工作,但是当我将其拆分为两个文件时,就无法通过编译器。这个...
我认为这是规范中的相关部分:
Foo是root软件包的成员,但是您不能引用它。这是JVM语言的通用特性(对于Groovy,请参见How to access java-classes in the default-package?,What's the syntax to import a class in a default package in Java?)。与Scala相同。
尝试将主App
入口点导入测试时,请执行此操作。这可能是一个恶作剧,但是将package scala
放在入口点定义的顶部似乎使该对象全局可用。这可能是邪恶的,但有效。