我正在尝试在 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
条路在某种程度上是否更好(如果它确实有效)。
最好怎么做?