2012-12-13 190 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

通用类型参数的类型推断严格地从左到右,仅从参数列表到参数列表。参数列表中没有统一,也没有向后传播。这是在规范中定义的,尽管我太累了,不能查看其中的位置。 –