2

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

我正在尝试使用案例类在 Scala 中对这种类型层次结构进行建模:

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

但是,我希望能够支持“默认”情况(类型只是扩展“对象”的情况),而不必指定超类型,所以是这样的:

//the following does not work, just illustrating what I want to achieve
case class TermType(name: String, superType: TermType = new TermType("Object", ???))

不确定这是否是正确的方法。我希望避免放置空值或类似的东西。我不知道走这Option条路在某种程度上是否更好(如果它确实有效)。

最好怎么做?

4

1 回答 1

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"))
于 2013-11-15T12:02:54.910 回答