オーバーライドに追加のパラメーターを追加すると失敗するオーバーライドを持つ関数があります。
これはコンパイルされます:
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 です。