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

How to use a function in two packages in Scala?

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

包内 foo

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

内包栏

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

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

Utils 对象放在一个单独的包中 util 并在您使用它的地方导入它?
或者在您的包对象中为其添加别名:

package object foo {
  val Utils = util.Utils
}

如果他们没有共同的所有方法,请在特征中找出共同的方法:

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

object Utils extends Common {
  ...
}

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

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._
}