Понимание unlift и unapply в игровых рамках Scala - PullRequest
1 голос
/ 07 ноября 2019

In "Play for Scala book" Листинг 8.12

import play.api.libs.json._
import play.api.libs.functional.syntax._
implicit val productWrites: Writes[Product] = (
  (JsPath \ "ean").write[Long] and
  (JsPath \ "name").write[String] and
  (JsPath \ "description").write[String]
)(unlift(Product.unapply))

Они объясняют unlift и unapply следующим образом:

Наконец, наш форматер в листинге8.12 использует оператор and для объединения средств форматирования и unlift, чтобы изменить тип возвращаемого значения неприменимой функции на то, что требуется здесь. Детали API для объединения таких форматеров и причина, по которой требуется unlift более сложны , но вы можете смело игнорировать это сейчас.

Так что же делает этот unlift и как он работает?

Я попробовал эту ссылку , но обе не одинаковые unlift

1 Ответ

0 голосов
/ 07 ноября 2019

Воспроизведение JSON unlift теперь "просто" вызов Scala Function.unlift, который сам"конвертирует" T => Option[R] в соответствующую частичную функцию, необходимую для Play JSON.

Поскольку unapply для класса наблюдения, как ожидается, будет иметь сигнатуру типа (PropA, PropB, PropC) => Option[MyCaseClass], передача ее в unlift создаст соответствующую частичную функцию.

...