在我的代码中,我有以下内容:
type Occurrences = List[(Char, Int)]
def subtract(x: Occurrences, y: Occurrences): Occurrences = {
val yMap = y.toMap
x foldLeft (List[(Char, Int)]()) { // ERROR
case (a: List[(Char, Int)], xe: (Char, Int)) =>
if(yMap.contains(xe._1)) (xe._1 -> (xe._2 - yMap(xe._1))) :: a
else a
}
}
它在编译时失败,在代码中错误标记之前的{
处。错误消息如下:
扩展函数缺少参数类型。的参数类型 匿名函数必须完全知道。 (SLS 8.5)预期类型是: INT
1)怎么会这样?据我所知,这里没有错误解释类型信息的余地,我在互联网上发现了很多这样的例子。我该如何解决这个问题?
2)为什么它认为期望的类型毕竟是Int
?
答案 0 :(得分:8)
发生错误的原因是您撰写了xs foldLeft (init) (f)
而不是(xs foldLeft init)(f)
或xs.foldLeft(init)(f)
。
前者不起作用,因为Scalas运算符符号规则只允许在obj method param
形式的调用中留下点和圆括号,而foldLeft
不是这种情况,因为它有两个参数列表。