2
我正在嘗試在Scala中建模DSL。 (我對Scala非常陌生,所以我可能會錯過一些微不足道的東西,在這種情況下,我會道歉)。 DSL支持一個非常簡單的類型系統,其中實體名稱爲「條款」的實體可以有一個類型,默認情況下可以擴展Object
,或者可以擴展其他類型,這些類型最終可以擴展爲其他類型或Object
。在Scala中建模DSL的類型層次結構
我想使用的情況下,類在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
的方式是否更好一些(如果它工作的話)。
最好的方法是什麼?
感謝,第二種情況是乾淨多了。是否有可能以某種方式使TermType(「Object」)失效而不是None?但是Object的superType需要是None。 – jbx
根據你的建議,這樣做是否有意義? 'case class TermType(name:String,superType:Option [TermType] = Some(TermType(「Object」,None)))' – jbx
我個人認爲在默認情況下沒有任何好處沒有更進一步的層次結構,但可能是你的應用程序需要在「複雜」葉節點上默認。如果你不能完全滿意,以後再改變會很容易,所以選擇一種方法並在其上工作:)。 –