我在这里找到了对Reads [T]的一个很好的解释:Syntax and meaning of a Scala/Play! code sample。
我不完全理解的一件事是为什么Format [T]在这里不需要Creature.apply的下划线:
import play.api.libs.json._
import play.api.libs.functional.syntax._
implicit val creatureFormat = (
(__ \ "name").format[String] and
(__ \ "isDead").format[Boolean] and
(__ \ "weight").format[Float]
)(Creature.apply, unlift(Creature.unapply))
但如果这只是Reads [T]那么示例
import play.api.libs.json._
import play.api.libs.functional.syntax._
implicit val creatureReads = (
(__ \ "name").read[String] and
(__ \ "isDead").read[Boolean] and
(__ \ "weight").read[Float]
)(Creature.apply _)
读取不是'要求'_?在我的代码中使用基于它们模型的Reads [T]和Format [T]的混合,它让我思考为什么差异。
答案 0 :(得分:1)
_
表示部分申请。
当您需要将方法转换为函数时,需要这样做。
大多数情况下,您可以跳过_
,因为编译器可以从上下文中推断出这一点并自动将方法扩展为函数。
因此,您可以在两种情况下放弃_
。