2

オーバーライドに追加のパラメーターを追加すると失敗するオーバーライドを持つ関数があります。

これはコンパイルされます:

object Test {
    def foo[T](x: Boolean)(y: Boolean): Boolean = x == y

    def bar[T](y: String, x:  T => Boolean)(z: => T) {}

    def bar[T](x: String)(z: => T) {}

    bar("qwer", foo(false)) {
      true
    }

    bar("qwer") {
      true
    }
}

しかし、2 番目の bar メソッドに 2 番目のパラメーターを追加すると、次のようになります。

def bar[T](x: String, y: Int)(z: => T) {}

bar("qwer", foo(false)) {
  true
}

bar("qwer", 123) {
  true
}

その後、プログラムはエラーでコンパイルされません:

error: missing arguments for method foo in object Test;
follow this method with `_' if you want to treat it as a 
partially applied function

私の質問は: 2 番目の bar メソッドに 1 つのパラメーターがある場合、カリー化された関数の "推論" (それが正しい用語かどうかは不明) が機能するのに、2 番目のパラメーターが追加されると機能しなくなるのはなぜですか?

これは Scala バージョン 2.10.3 です。

4

0 に答える 0