Scala编译器无法推断出隐式视图

时间:2017-09-08 12:17:22

标签: scala types playframework

如果我没有显式实例化foo函数的特定于类型的版本,则对formatFromString的调用会产生下面的编译器错误。但是,在bar情况下,编译器能够推导出正确的隐式参数。

为什么?

import play.api.libs.json.{Reads, Writes, Json}

case class Person(name: String, age: Int)

object Person { implicit val jsonFormat = Json.format[Person] }

def foo[T](input: String)(implicit fromS: String => T): T = fromS("")

def bar[T](input: T)(implicit toS: T => String): String = ""

implicit def formatFromString[T : Reads](s: String): T = Json.parse(s).validate[T].get

implicit def formatToString[T : Writes](x: T): String = Json.toJson(x).toString

// If I uncomment this line, everything works ...
// implicit val personFromString = formatFromString[Person] _

foo[Person]("")
bar(Person("Peter", 1234))

编译错误:

  

错误:(18,13)String =>中没有可用的隐式视图人。       fooPerson                  ^

0 个答案:

没有答案