如何在Scala中的两个包中使用函数?

时间:2015-01-14 13:23:48

标签: scala package

我在Scala中有两个包:package foopackage bar。两者都有一个Utils对象,它们具有相同的方法doSomething()doSomethingElse()。代码如下所示:

内包foo

object Utils{
def doSomething()
def doSomethingElse()
}    

内部包裹栏

object Utils{
def doSomething()
def doSomethingElse()
}    

有没有办法可以提供一个共同点,两个包都可以使用Utils对象中的方法?我想避免代码重复。我想到的是在其中一个包中编写一个包对象并将其导入另一个包中。但有没有更好的方法来消除代码重复?

2 个答案:

答案 0 :(得分:3)

包对象可以继承其他特征,抽象类和类,就像任何其他对象一样。只需在适当命名的特征中提供方法,并将其包括在:

trait SomethingHandler {
  def doSomething() = ???
  def doSomethingElse() = ???
}

package object foo extends SomethingHandler

package object bar extends SomethingHandler

或者,您可以使用对象并将其导入两个包命名空间:

object SomethingHandler {
  def doSomething() = ???
  def doSomethingElse() = ???
}

package object foo {
  import some.package.SomethingHandler._
}

package object bar {
  import some.package.SomethingHandler._
}

答案 1 :(得分:2)

Utils对象放在单独的包util中并将其导入您使用它的位置? 或者在包对象中将其别名:

package object foo {
  val Utils = util.Utils
}

如果他们没有共同的所有方法,请在特征中分解常用方法:

trait Common {
  def doSomething() = ???
  def doSomethingElse() = ???
}

object Utils extends Common {
  ...
}