Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中推断lambda的正确类型_Scala_Type Inference - Fatal编程技术网

在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
相同,因为这已经实现,所以它的处理方式是这样的,只是猜测而已。