当应用于def
和时,我观察到 Scala 的类型推断有所不同val
。
使用def
,我可以定义一个抽象的 nullary 方法const
返回一些类型的值Int => Int
。当const
使用函数字面量实现时,我不需要提供参数类型,因为它可以由编译器推断:
trait D {
def const: Int => Int
}
object D extends D {
def const = i => i + 1
}
这可以。(不利的一面是,每次访问都会创建一个新的函数实例D.const
。)
现在考虑使用 的类似构造val
:
trait V {
val const: Int => Int
}
object V extends V {
val const = i => i + 1
}
这将无法编译,失败
error: missing parameter type
val const = i => i + 1
^
为什么?