我很困惑这个私有函数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
?这应该如何运作?
答案 0 :(得分:3)
底层配置对象'底层:配置'有返回类型为Int的方法getInt,这个信息提供了足够的证据来推断readValue的类型参数,所以你不需要明确定义它
http://en.wikipedia.org/wiki/Type_inference
http://docs.scala-lang.org/tutorials/tour/local-type-inference.html - 带id功能的示例应该有用