讓我們說我有一個通用的案例類:斯卡拉:模式匹配「具體」的情況下
sealed trait Data
final case class TextData() extends Data
final case class ImageData() extends Data
final case class MetaData[D <: Data](data: D) extends Data
我想要模式匹配的數據對象。我已經定義:
def getDataTypeName(data: Data): String ={
data match {
case TextData()=>"text"
case ImageData()=>"image"
//MetaData(MetaData(_))=>"metaMeta1" //a
case _:MetaData[MetaData[_]]=>"metaMeta2" //b
//case MetaData(data:Data)=>"meta"+ getDataTypeName(data) //c
//MetaData(TextData(_))=>"metaMeta1" //d
case MetaData(_)=>"meta"
}
}
我希望能夠看到,如果我的數據是元 - 元數據,元的TextData等 a
行給我一個錯誤,他說:
構造不能實例化爲預期的類型;實測值: 研究所$ A $ A.MetaData [d]要求:A $ A115.this.Data情況 元數據(metadata(_))=> 「metaMeta1」
我寧願有類似的東西線a
。或者像c
這樣的東西也不錯。我也試過b
。這一個產生一些警告:
非可變類型參數甲$ A115.this.MetaData []在 型圖案A $ A115.this.MetaData [A $ A115.this.MetaData []]是 選中,因爲它是由擦除 情況下消除:元數據[元數據[] => 「metaMeta」 ^
我得到這樣的警告兩個MetaData[_]s
。我的理解是,在與我的測試結果一致的類型擦除之後,所述模式減少到_。
因此,我想知道是否有針對MetaMetaData
,MetaTextData
等
或者,他們不應該被用來MetaMetaMetaData
使用密封類的方式我的設計相匹配的一種方式?你會建議什麼替代設計?
我認爲對元數據的比賽,然後再匹配以檢查內部類是不是你理想的解決方案? '''data match {case Metadata(x)=> x match {...}} – pedrorijo91
我想我也會很高興。事實上,我確實嘗試了類似的做法(c行),但無法獲得正確的語法。 – ShS