为什么格式组合器在Scala Play JSON组合器中不需要下划线

时间:2014-11-21 11:17:58

标签: scala playframework

我在这里找到了对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]的混合,它让我思考为什么差异。

1 个答案:

答案 0 :(得分:1)

方法后面的

_表示部分申请。

当您需要将方法转换为函数时,需要这样做。

大多数情况下,您可以跳过_,因为编译器可以从上下文中推断出这一点并自动将方法扩展为函数。

因此,您可以在两种情况下放弃_