類層次我想在Inox公司解算器界面下面的斯卡拉層次結構模型:建模Inox公司
abstract class Element()
abstract class nonZero() extends Element
final case class Zero() extends Element
final case class One() extends nonZero()
final case class notOne() extends nonZero()
我如何可以模擬非零?
如果我將其建模爲一個構造函數
def mkConstructor(id: Identifier, flags: Flag*)
(tParamNames: String*)
(sort: Option[Identifier])
(fieldBuilder: Seq[TypeParameter] => Seq[ValDef]) = {
val tParams = tParamNames map TypeParameter.fresh
val tParamDefs = tParams map (TypeParameterDef(_))
val fields = fieldBuilder(tParams)
new ADTConstructor(id, tParamDefs, sort, fields, flags.toSet)
}
然後我不能指定,它具有擴展它的其它構造。而如果我將它建模爲一種排序:
def mkSort(id: Identifier, flags: Flag*)
(tParamNames: String*)
(cons: Seq[Identifier]) = {
val tParams = tParamNames map TypeParameter.fresh
val tParamDefs = tParams map (TypeParameterDef(_))
new ADTSort(id, tParamDefs, cons, flags.toSet)
}
然後我不能指定它是Element的子類型。
爲什麼我需要這個
我需要這個層次,因爲我需要狀態屬性是:
在組領域的非零元素的一個,逆和 乘以非零元素形成一個組。
我需要那麼一些機制來產生一個類型來限制一類的構造函數,在這種情況下,限制Element
的構造函數One
和notZeroOne()
。在這種情況下,我會造型:
abstract class Element()
final case class Zero() extends Element
final case class One() extends Element()
final case class notZeroOne() extends Element()
什麼是最乾淨的解決方案呢?