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 шаблон матч с параметром типа класса типа
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]
от Play Framework - это в основном говорит, что существует неявное преобразование доступна для типа T => JsValue
)
:
и вашего шаблона матча «Нет Json сериализатора найден для типа Any не пытаться реализовать неявный пишущие или формат для этого типа.». – kornfridge
Можете ли вы создать экземпляр 'Writer [FormField]', который может превратить 'StringField' или' ChoiceField' в json? –
Если я попытался создать 'Writes [FormField]', мне все равно понадобилось бы сопоставить шаблон, и у меня была бы такая же проблема. (EDIT: 'makeJson' здесь _is_ в основном' Writes [FormField] ') – kornfridge