Scala特征和类在同一个文件中

时间:2017-08-30 08:59:49

标签: scala coding-style

将特征和类在Scala中的相同文件中实现它是一个好习惯吗? 例如。在B.scala你有:

trait A
class B extends A

2 个答案:

答案 0 :(得分:4)

你可以,但如果他们没有密切关系,你最好不要。

实用的原因是在文件中添加许多类/特征可能会使编译(尤其是增量编译)变慢。

以下是https://virtuslab.com/blog/zinc-sbt-friendly-code/#less-is-more

的摘录
  

每个源文件较少的类/特征/对象意味着节省更多时间。 Scalac可以编译完整的源代码。即使Zinc知道只需要重新编译一行对象,它仍然需要编译整个源代码(并且所有内容都包含宏和其他令人讨厌的东西)。

     

解决方案尽可能简单:拆分你的资源!如果增量编译不足以说服你,你应该知道它也应该有助于编译时间,甚至可以在合并期间减少冲突。

值得注意的例外是:

  • sealed trait的家庭:sealed只允许在源文件中扩展trait,因此在这种情况下,您必须保留所有类扩展trait object 1}}在一起。

  • 类和伴随对象:以类命名的ACCOUNT只有在同一源文件中定义时才被视为其伴随对象,因此您必须将它们保持在一起。

    < / LI>

official style guide似乎证实了这种方法,即使它没有明确提到编译性能:

  

通常,文件应包含单个逻辑编译单元。 “逻辑”是指一个阶级,特征或对象。本指南的一个例外是具有伴随对象的类或特征。伴随对象应与其对应的类或特征在同一文件中分组。

答案 1 :(得分:1)

是的,你可以让一个类在同一个scala文件中扩展一个特征。另外,请查看sealed trait,看看它是否与您相关。

相关问题