【发布时间】:2013-11-03 17:25:36
【问题描述】:
我刚开始学习 Scala,来自 Java 背景。我一直在尝试理解函数中的类型参数和类型的推断。这是 Scala 文档中的标准示例:
class Decorator(left: String, right: String) {
def layout[A](x: A) = left + x.toString() + right
}
object FunTest extends Application {
def apply(f: Int => String, v: Int) = f(v)
val decorator = new Decorator("[", "]")
println(apply(decorator.layout, 7))
}
如果我尝试将类型参数应用于 apply 函数并将 v 保持为强类型,则会发生类型不匹配。为什么这里没有推断出类型?
def apply[B](f: B => String, v: String) = f(v) //Type mismatch
def apply[B](f: B => String, v: B) = f(v) //Works fine
谢谢
【问题讨论】:
-
我认为这是因为 B 不是在您定义“应用”时推断出来的,而是在您调用它时推断出来的。 (疯狂猜测)B 没有被实例化是有道理的,因为 f 是未定义的。
标签: function scala type-parameter