Scala で DSL をモデル化しようとしています。(私は Scala に非常に慣れていないので、些細なことを見落としている可能性があります。その場合は申し訳ありません)。DSL は非常に単純な型システムをサポートしており、'Terms' と呼ばれるエンティティは型を持つことができます。この型は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", ???))
それが正しいアプローチかどうかはわかりません。null やそのようなものを配置することは避けたいと思います。Option
道を行くことが何らかの方法でより良いかどうかはわかりません(それがまったく機能する場合)。
どうやって行くのが一番いいですか?