在List[_]中扩展函数缺少参数类型。

3

Scala版本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
我测试了 2.8.0 版本,但无法重现这个问题。 - Owen
可能是 SI-5330 的一个实例。 - Paolo Falabella
2个回答

0
唯一让我能够编译您的示例的方法是引入一个类型参数:
def rm[A](workingSet: List[A])(item: A)(f:(List[A], A) => List[A]) = f(workingSet, item)

你使用存在类型和 Any 有什么特别的原因吗?


0
有时编译器无法推断类型,需要你帮忙。 尝试使用“list.filter(_!= item)”-通常使用“。”符号就可以解决问题。 如果这样做行不通,你总是可以使用“list filter { li:Int => li!=item }”。 明白了吗,Scala 2.10 REPL似乎没有问题推断参数类型。

类型推断与是否使用操作符表示法无关,它不会改变任何东西。 - kiritsuku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接