为什么我不能在这里省略隐含参数?

时间:2015-02-09 03:53:09

标签: json scala playframework playframework-2.0

我的代码看起来像这样

  def okJsonify[T](data: T)(implicit tjs: Writes[T]): Result = Results.Ok(toJson(data)(tjs))

toJson的定义:play-json_2.11-2.3.7-sources.jar!/play/api/libs/json/Json.scala

  def toJson[T](o: T)(implicit tjs: Writes[T]): JsValue = tjs.writes(o)

我发现我可以像这样编写更短的代码(省略(tjs)

  def okJsonify[T](data: T)(implicit tjs: Writes[T]): Result = Results.Ok(toJson(data))

但不能像这样进一步缩短:

  def okJsonify[T](data: T): Result = Results.Ok(toJson(data))

有没有人有这方面的想法?谢谢!

1 个答案:

答案 0 :(得分:1)

显而易见:toJson需要Write[T]参数。由于它是隐式的,因此可以隐式传递,因此toJson(data)(tjs)(显式)和tJson(data)(隐式)都可以工作。但是,如果你没有 要传递Writes[T]值,例如最后一个案例,则无法明确或隐含地传递任何内容。