sealed trait FormField
case class StringField(name: String, value: String) extends FormField
case class ChoiceField[T : Writes](name: String, value: T, choices: List[T]) extends FormField
然後,別的地方我需要這樣做:Scala的模式匹配類型爲Class的類型參數
def makeJson(fields: List[FormField]) = fields.map {
case StringField(name, value) => Json.obj(name -> value)
case ChoiceField(name, value, _) => Json.obj(name -> value)
}
在最後一種功能,scalac/SBT不「理解」是value
是可轉換爲json(通過其隱式/類型類Writes[T]
)。我怎麼寫它,以便它「得到它」?
(注:Writes[T]
是玩框架 - 它基本上說,沒有繳費的類型T => JsValue
隱式轉換)
:
而且你的模式匹配「未找到任何類型的JSON序列嘗試實施這種類型的隱寫或格式。」 – kornfridge
你不能創建一個'Writer [FormField]'實例,它可以將'StringField'或'ChoiceField'變成json嗎? –
如果我試圖創建'Writes [FormField]',我仍然需要模式匹配,並且我會有完全相同的問題。 (編輯:'makeJson'在這裏_is_基本上''寫[FormField]') – kornfridge