2013-01-13 36 views
3

斯卡拉版本2.10.0缺少的参数类型扩展功能[_]

我创造这样的功能。

def rm(workingSet: List[_])(item: Any)(f:(List[_], Any) => List[_]) = f(workingSet, item) 

我得到以下错误:

scala> val data = List(1,2,3) 
scala> rm(data)(1)((list, item)=>list filter (_ != item)) 
<console>:10: error: missing parameter type for expanded function ((x$1) => x$1.$bang$eq(item)) 
      rm(data)(1)((list, item)=>list filter (_ != item)) 
               ^

有人可以解释这个问题?

谢谢!

+2

你使用的是什么版本的scala? – Owen

+0

我早在'2.8.0'测试过,我不能重现这个问题。 – Owen

+0

我使用版本2.10.0 – wyb

回答

0

有些时候编译器无法推断出类型,你必须帮助它。尝试“list.filter(_!= item)” - 使用“。”表示法经常可以做到这一点。如果不这样做,你总是可以做“list filter {li:Int => li!= item}”。 FWIW,scala 2.10 REPL似乎没有问题推断出我的参数类型。

+0

类型推理的一个实例,如果使用操作符或不。它不会改变任何东西。 – sschaef

0

我能得到你的榜样编译唯一的办法是引入一个类型参数:

​​

任何特别的原因,为什么你正在使用existentials和Any

+0

我从[hammurabi](http://code.google.com/p/hammurabi/)复制此代码 – wyb