【发布时间】:2011-02-17 06:11:25
【问题描述】:
我倾向于在案例类中使用这种冗余命名:
abstract class MyTree
case class MyTreeNode (...)
case class MyTreeLeaf (...)
难道不能在MyTree的inside中定义Node和Leaf吗? 这里有哪些最佳做法?
【问题讨论】:
标签: scala scala-2.8 case-class
我倾向于在案例类中使用这种冗余命名:
abstract class MyTree
case class MyTreeNode (...)
case class MyTreeLeaf (...)
难道不能在MyTree的inside中定义Node和Leaf吗? 这里有哪些最佳做法?
【问题讨论】:
标签: scala scala-2.8 case-class
我不建议将案例类放在它们的抽象超类中,因为嵌套类在 Scala 中是路径相关的。如果有的话,您可以将它们放在伴随对象中。
abstract class MyTree
object MyTree {
case class Node (...) extends MyTree
case class Leaf (...) extends MyTree
}
(注意:我还没有测试过这个......)
【讨论】:
由于类、特征和对象名称是包作用域的,为什么不使用包来防止与其他节点和叶发生别名,并简单地将它们称为Node 和Leaf,同时将它们放在任何其他作用域构造之外(即,一个对象)?
【讨论】:
def、val(或var)和type 声明放在包对象中,但只能将特征、类和对象放在顶层。伴侣是类/对象对(共享一个名称)并且在同一个源文件中定义。同伴可以访问彼此的私人成员。