「delegatedFoo()」と呼ばれる関数デリゲート メソッドがあり、次のようにメソッド (つまり、関数ポインターの scala バージョン) に引数として渡す必要があるとします。
addMyDelegatedMethod(delegatedFoo)
(簡潔にするために)その行は問題なくコンパイル/実行されると仮定します。これを次のように変更します。
addMyDelegateOverrideMethod("uh-o", delegatedFoo)
この行はコンパイラ例外をスローします:クラス myClass のメソッド delegatedFoo の引数がありません
Q: 複数引数のメソッド呼び出し内でデリゲート (参照) を渡すにはどうすればよいですか? (これはScalaでもできることですか?)
編集: より正確に言うと、署名は次のようになります。
def delegatedFoo(str: String): String = { return "OK" }
def addMyDelegatedMethod(delegate: (String) => (String))
def addMyDelegateOverrideMethod(foo: String, delegate: (String) => (String))
更新: パオロの回答を確認し、さらに実験を行った後、オーバーロードされた署名が関係している場合に、問題 (バグ?) が表面化するのを確認できます。(使用されていないため、上記の例にそれを投げ込むことはしませんでしたが、そこにあるだけでコンパイラに頭痛がするようです):
scala> object MyControl {
def doDele(strA: String, strB: String, delegate: String => String) { delegate(strA) }
def doDele(strA: String, count: Int, delegate: String => String) { delegate(strA) }
}
defined module MyControl
scala> def myFn(s: String): String = { println(s); s }
myFn: (s: String)String
scala> MyControl.doDele("hello", "bye", myFn)
<console>:10: error: missing arguments for method myFn;
follow this method with `_' if you want to treat it as a partially applied function
MyControl.doDele("hello", "bye", myFn)
MyControl にはオーバーロードされたメソッドのセットが定義されています...オーバーロード メソッドをコメント アウトする (またはその名前を変更する) と、コンパイラはそれを適切に処理します... :\