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))
                                                 ^

有人可以解释这个问题吗?

谢谢!

4

2 回答 2

0

我可以编译您的示例的唯一方法是引入一个类型参数:

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

您使用存在主义和的任何特殊原因Any

于 2013-01-13T04:20:20.030 回答
0

有时编译器无法推断类型,您必须帮助它。尝试“list.filter(_ != item)” - 使用“.” 符号通常可以解决问题。如果还不行,你可以随时执行“list filter { li: Int => li != item }”。FWIW,scala 2.10 REPL 似乎没有为我推断参数类型的问题。

于 2013-01-13T03:40:01.997 回答