"success", "data" -> obj)) и назовите"> "success", "data" -> obj)) и назовите"> "success", "data" -> obj)) и назовите" />

Родовая функция с неявным аргументом

Я пытаюсь обобщить одну из функций, которые я использую для возвращения Json от действия Игры.

Я в настоящее время делаю это как это:

def JsendOkObj(obj: JsValue) = Ok(Json.obj("status" -> "success", "data" -> obj))

и назовите его:

JsendOkObj(Json.toJson(myObj))

Я хотел бы сделать что-то больше как:

def JsendOkObj[A](obj: A) = Ok(Json.obj("status" -> "success", "data" -> Json.toJson(obj)))

и затем назовите его как:

JsendOkObj(myObj)

где Джсон.тоджсон определенный как:

def toJson[A](implicit arg0: Writes[A]): Enumeratee[A, JsValue]

Ошибка я получаю компилирование этого, состоит в том, что я должен определить Писание для типа . Который не возможен здесь, так как я не знаю, которым тип на самом деле закончит тем, что был:

Никакой Json deserializer не найден для типа A. Попытайтесь осуществить неявное, Пишет или Формат для этого типа.

3
nl ja de

1 ответы

Можно гарантировать, что неявное Пишет будет в объеме, когда вы будете звонить toJSon , добавляя неявный список параметров к вашему собственному методу, как это:

def JsendOkObj[A](obj: A)(implicit w: Writes[A]) =
  Ok(Json.obj("status" -> "success", "data" -> Json.toJson(obj)))

Который эквивалентен прохождению экземпляра класса типа явно, чтобы toJson :

def JsendOkObj[A](obj: A)(implicit w: Writes[A]) =
  Ok(Json.obj("status" -> "success", "data" -> Json.toJson(obj)(w)))

Обратите внимание, что вы могли также использовать контекстно-зависимое здесь:

def JsendOkObj[A: Writes](obj: A) =
  Ok(Json.obj("status" -> "success", "data" -> Json.toJson(obj)))

Это - просто синтаксический сахар для моей первой версии выше.

12
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Scala User Group
Scala User Group
1 486 участник(ов)

[RU] Scala Chat. Rules, additional links, FAQ: https://telegra.ph/Russian-Speaking-Scala-User-Group-08-27

Scala Jobs
Scala Jobs
852 участник(ов)

Rules: http://telegra.ph/My-lyudi-i-ehto-znachit-chto-nam-nuzhna-organizaciya-02-07 Main Scala Channel: https://t.me/scala_jobs_feed Flood Room: https://t.me/scala_ponv