在Scala中推断lambda的正确类型
为什么编译器不能正确推断在Scala中推断lambda的正确类型,scala,type-inference,Scala,Type Inference,为什么编译器不能正确推断x和y的类型? 我读过一些关于Scala类型推断的文章,但仍然不明白为什么它是不可能的 object Test { def main(args: Array[String]) { def add(x: Int, y: Int) = x + y val f = (x,y) => add(y,x) // error: missing parameter type } } 因为add可能会被其他类型重载,因此实现它来处理像
x
和y
的类型?我读过一些关于Scala类型推断的文章,但仍然不明白为什么它是不可能的
object Test {
def main(args: Array[String]) {
def add(x: Int, y: Int) = x + y
val f = (x,y) => add(y,x) // error: missing parameter type
}
}
因为
add
可能会被其他类型重载,因此实现它来处理像您这样的简单情况会给编译器增加很多复杂性
编辑:
您可能知道,haskell能够推断出这样一个声明的类型,但这只是因为haskell不支持重载。可能是,因为编译器看到,它实际上是一个传递,因此与
val f=add
相同,因为这已经实现,所以它的处理方式是这样的,只是猜测而已。