【问题标题】:Preferred way of grouping utility functions in Scala?在 Scala 中对实用程序函数进行分组的首选方式?
【发布时间】:2011-04-23 11:00:28
【问题描述】:

对不属于某个类的实用函数进行分组的最佳方法是什么?在 Ruby 中,我会将它们分组到一个模块中。我应该在 Scala 中使用特征来实现相同的效果还是对象?

【问题讨论】:

    标签: scala code-organization


    【解决方案1】:

    通常,我将语义不同的实用函数放入不同的特征中,并为每个特征创建一个对象,例如

    trait Foo {
      def bar = 1
    }
    object Foo extends Foo
    

    这样我最灵活。我可以通过import 语句或通过类声明中的with 导入实用程序函数。此外,我可以轻松地将不同的实用程序特征组合到一个新对象中,以简化最常用实用程序函数的导入语句,例如

    object AllMyUtilites extends Foo with Foo2
    

    【讨论】:

    • 我认为with 是一种不好的做法,因为它会污染类型,提供较少的灵活性(您可以使用imports 跳过和重命名),并且您永远不需要您的课程也是实用程序类,仅当您将实用程序组合在一起时。所以,我会留在objects 或使用with 仅用于分组。
    • 这太好了,我在考虑是否要拥有一个特征一个对象,但你可以拥有both! =)
    【解决方案2】:

    打包对象或只是普通对象。

    例如,请参阅Scala.Predefscala.math

    【讨论】:

    • 如果你想利用子类型多态性怎么办
    【解决方案3】:

    如果您希望它们与将要使用它的类混合在一起,则为特征。对象,如果您只想导入它们。

    【讨论】:

    • 如果你有适用于不同操作系统的实用函数,将它们作为特征不是更好吗?这样可以继承某些行为吗?
    • @Geo,你是什么意思?具有不同实现的相同接口(每个操作系统一个)?那么它不仅仅是实用功能,它更多的是一个设计问题(也许是一个要求)。
    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 2011-05-27
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2011-11-10
    相关资源
    最近更新 更多