2012-12-13 183 views
2

爲什麼這個代碼產生一個錯誤斯卡拉 - 推斷類型參數

def test[A](a: List[A], f: A => A) = a.map(f) 

println(test(List(1,2,3), _*2)) 

error: missing parameter type for expanded function ((x$2) => x$2.$times(2)) 

不應斯卡拉能夠告訴A是詮釋?

回答

5

您需要第二個參數列表才能正常工作。我不確定這是如何在規範中定義的,但是我之前已經看到了這一點。

scala> def test[A](a: List[A])(f: A => A) = a.map(f) 
test: [A](a: List[A])(f: (A) => A)List[A] 

scala> test(List(1))(_+1) 
res1: List[Int] = List(2) 
+0

謝謝。這是完美的。 – SpiderPig

+1

通用類型參數的類型推斷嚴格地從左到右,僅從參數列表到參數列表。參數列表中沒有統一,也沒有向後傳播。這是在規範中定義的,儘管我太累了,不能查看其中的位置。 –