为什么不需要明确设置泛型参数?

时间:2015-01-11 02:46:40

标签: scala type-inference

我很困惑这个私有函数readValue是如何工作的:

private def readValue[T](path: String, v: => T): Option[T] = {
  try {
    Option(v)
  } catch {
    case e: ConfigException.Missing => None
    case NonFatal(e)                => throw reportError(path, e.getMessage, Some(e))
  }
}

参数v是一个返回T的函数,当您调用它时会设置T

readValue[String]

但是in the following snippet,我看到readValue被使用,没有明确定义的通用参数类型T

def getInt(path: String): Option[Int] = readValue(path, underlying.getInt(path))

为什么不是

readValue[Int](path, underlying.getInt(path))

即。明确设置Int?这应该如何运作?

1 个答案:

答案 0 :(得分:3)

底层配置对象'底层:配置'有返回类型为Int的方法getInt,这个信息提供了足够的证据来推断readValue的类型参数,所以你不需要明确定义它

http://en.wikipedia.org/wiki/Type_inference

http://docs.scala-lang.org/tutorials/tour/local-type-inference.html - 带id功能的示例应该有用