-1
假設我有以下類:如何在Scala中優雅地編寫這個函數?
case class Field(name: String, default: String)
case class Type(name: String, fields: Set[Field])
case class Info(name: String, type: Type, values: Map[Field, String])
顯然,對於任何info:Info
info.values.keySet == info.type.fields
假如我也有一個info:Info
和newType:Type
使
info.type.name == newType.name
現在我需要創建newInfo:Info
給出info: Info
和newType: Type
,這樣:
1. newInfo.type == newType
2. newInfo.values.keySet = newType.fields
3. for each newField in newType.fields if !info.type.fields.contains(newField)
newInfo.values(newField) == newField.default
我不知道如何編寫一個函數來簡單和優雅創造newInfo
:
def makeNewInfo(info: Info, newType: Type): Info = {
assert info.type.name == newType.name
... // ???
}
我猜你想要的所有數據從'info'複製到'newInfo' ?所有的字段是否都會出現在'newInfo'中? –
只有在'newType'中出現的字段。如果'info'包含字段'f',其中'_does不存在於'newType中,'newInfo'不應該包含'f'。 – Michael
請注意,如果'info'不包含字段'f1',其中_does_出現在'newType'中,那麼'newInfo'應該包含'f1'及其默認值。 – Michael