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)どうしてそうなるのでしょうか?私の知る限り、ここでは型情報を誤解する余地はなく、インターネット上でそのような例をたくさん見つけています。どうすれば修正できますか?

Int2)やっぱり期待されるタイプだと思っているのはなぜですか?

4

1 に答える 1

8

またはxs foldLeft (init) (f)の代わりに書き込んだためにエラーが発生します。(xs foldLeft init)(f)xs.foldLeft(init)(f)

前者は機能しません。これは、Scalas演算子表記規則では、呼び出しがフォームで発生した場合にのみドットと括弧を残すことができるためです。これは、 2つのパラメーターリストがあるためobj method param、そうではありません。foldLeft

于 2012-10-28T11:52:24.147 に答える