2013-03-26 53 views
3

爲什麼編譯器無法正確推斷出xy的類型?
我讀過一些關於Scala類型推斷的文章,但仍然無法弄清楚它爲什麼不可能。在Scala中推斷正確類型的lambda表達式

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 
    } 
} 

回答

2

因爲add可以與其他類型的過載,從而實現它甚至能處理簡單的情況下,像你將大量的複雜性添加到編譯器。

編輯

你可能知道,Haskell是能夠推斷出這種類型的聲明,但這只是由於這樣的事實,即哈斯克爾不支持重載。

+0

但爲什麼'val f =(x,y)=> add(x,y)'可以接受? – 2013-03-26 12:20:09

+1

因爲編譯器看到它可能是實際上是通過的,因此它和'val f = add _'一樣,而且這已經實現了,它就像那樣處理,只是猜測而已。 – drexin 2013-03-26 12:24:10

相關問題