【发布时间】:2011-04-23 11:00:28
【问题描述】:
对不属于某个类的实用函数进行分组的最佳方法是什么?在 Ruby 中,我会将它们分组到一个模块中。我应该在 Scala 中使用特征来实现相同的效果还是对象?
【问题讨论】:
对不属于某个类的实用函数进行分组的最佳方法是什么?在 Ruby 中,我会将它们分组到一个模块中。我应该在 Scala 中使用特征来实现相同的效果还是对象?
【问题讨论】:
通常,我将语义不同的实用函数放入不同的特征中,并为每个特征创建一个对象,例如
trait Foo {
def bar = 1
}
object Foo extends Foo
这样我最灵活。我可以通过import 语句或通过类声明中的with 导入实用程序函数。此外,我可以轻松地将不同的实用程序特征组合到一个新对象中,以简化最常用实用程序函数的导入语句,例如
object AllMyUtilites extends Foo with Foo2
【讨论】:
with 是一种不好的做法,因为它会污染类型,提供较少的灵活性(您可以使用imports 跳过和重命名),并且您永远不需要您的课程也是实用程序类,仅当您将实用程序组合在一起时。所以,我会留在objects 或使用with 仅用于分组。
打包对象或只是普通对象。
例如,请参阅Scala.Predef 和 scala.math。
【讨论】:
如果您希望它们与将要使用它的类混合在一起,则为特征。对象,如果您只想导入它们。
【讨论】: