如何创建可用于scala中所有内部包的包对象?

时间:2014-10-20 06:55:29

标签: scala packages

我有这样的包结构。

在档案A / B / package.scala

package A
package object B {
  def foo = "Hello world"
}

在档案A / B / xyz.scala

package A.B
object bar {
  def baz() {
    println(foo())
  }
} 

这不会引发错误。它将按预期工作。但如果我尝试使用像:

在文件A / B / C / biz.scala

package A.B.C
object biz {
  def baz() {
    println(foo())
  }
}

由于foo不在内包的范围内,因此会抛出错误。我需要全局访问foo()。我怎样才能实现它?

一种方法是导入A.B,如import A.B._

但它会导入A.B包中的所有类,我不想这样做。 有没有其他方法可以实现相同的目标?

1 个答案:

答案 0 :(得分:1)

最合适的是import A.B.foo(以及您需要的其他特定方法)。您还可以在非包对象中使foo可用并导入其所有方法。当然,您也可以 将它们包含在包对象中:

package A.B

abstract class ABMethods { def foo = ... }


package A

package object B extends ABMethods { ... }


package A.B

object Foo extends ABMethods { ... }

但是如果没有A.B的所有类,就没有办法让所有的包对象方法都可用。