3

在我的代码中,我有以下内容:

  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毕竟是?

4

1 回答 1

8

发生错误是因为您写xs foldLeft (init) (f)的不是(xs foldLeft init)(f)or xs.foldLeft(init)(f)

前者不起作用,因为 Scalas 运算符符号规则只允许在调用发生时留下点和括号 form obj method param,但情况并非如此,foldLeft因为它有两个参数列表。

于 2012-10-28T11:52:24.147 回答