如何在 Scala 的两个包中使用一个函数?
How to use a function in two packages in Scala?
我在 Scala 中有两个包:package foo
和 package 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._
}
我在 Scala 中有两个包:package foo
和 package 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._
}