将特征和类在Scala中的相同文件中实现它是一个好习惯吗? 例如。在B.scala你有:
trait A
class B extends A
答案 0 :(得分:4)
你可以,但如果他们没有密切关系,你最好不要。
实用的原因是在文件中添加许多类/特征可能会使编译(尤其是增量编译)变慢。
以下是https://virtuslab.com/blog/zinc-sbt-friendly-code/#less-is-more
的摘录每个源文件较少的类/特征/对象意味着节省更多时间。 Scalac可以编译完整的源代码。即使Zinc知道只需要重新编译一行对象,它仍然需要编译整个源代码(并且所有内容都包含宏和其他令人讨厌的东西)。
解决方案尽可能简单:拆分你的资源!如果增量编译不足以说服你,你应该知道它也应该有助于编译时间,甚至可以在合并期间减少冲突。
值得注意的例外是:
sealed trait
的家庭:sealed
只允许在源文件中扩展trait
,因此在这种情况下,您必须保留所有类扩展trait
object
1}}在一起。
类和伴随对象:以类命名的ACCOUNT
只有在同一源文件中定义时才被视为其伴随对象,因此您必须将它们保持在一起。
official style guide似乎证实了这种方法,即使它没有明确提到编译性能:
通常,文件应包含单个逻辑编译单元。 “逻辑”是指一个阶级,特征或对象。本指南的一个例外是具有伴随对象的类或特征。伴随对象应与其对应的类或特征在同一文件中分组。
答案 1 :(得分:1)
是的,你可以让一个类在同一个scala文件中扩展一个特征。另外,请查看sealed trait
,看看它是否与您相关。