在Scala中为DSL建模类型层次结构

时间:2013-11-15 11:23:35

标签: scala constructor default-value

我正在尝试在Scala中建模DSL。 (我对Scala很新,所以我可能会遗漏一些微不足道的东西,在这种情况下道歉)。 DSL支持一个非常简单的类型系统,其中称为“术语”的实体可以有一个类型,默认情况下扩展Object,或者可以扩展其他类型,这些类型本身最终会扩展另一个类型或{{1 }}。

我正在尝试使用案例类在Scala中建模此类型层次结构:

Object

但是,我希望能够支持'默认'情况(类型只扩展'Object'的情况),而不必指定超类型,所以有类似的东西:

case class TermType(name: String, superType: TermType)

不确定这是否是正确的做法。我希望避免使用null或类似的东西。我不知道//the following does not work, just illustrating what I want to achieve case class TermType(name: String, superType: TermType = new TermType("Object", ???)) 方式是否在某种程度上更好(如果它有效)。

最好怎么做呢?

1 个答案:

答案 0 :(得分:3)

例如:

sealed abstract class TermType
case class TermTypeSimple(name: String) extends TermType
case class TermTypeWithParen(name: String, parent: TermType) extends TermType

其他方式:

case class TermType(name: String, superType: Option[TermType] = None)

用法:

TermType("Hi")
TermType("Buy", Some(TermType("Beer"))