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

Why can't I omit the implicit parameter here?

我的代码是这样的

  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))

有人对此有想法吗?谢谢!

很明显:toJson 需要一个 Write[T] 参数。由于它是隐式的,因此可以隐式传递,因此 toJson(data)(tjs) (显式)和 tJson(data) (隐式)都有效。但是,如果您 没有 要传递的 Writes[T] 值,例如最后一种情况,则没有任何内容可以显式或隐式传递。