Предположим, что существует функциональный метод делегирования, называемый делегированнымFoo(), который должен передаваться как аргумент метода (то есть версия scala-функции указателя функции):Вызов делегата Scala в вызове метода с несколькими аргументами
addMyDelegatedMethod(delegatedFoo)
Предположим (для краткости), что линия компилируется/выполняется просто отлично. Теперь измените его следующим образом:
addMyDelegateOverrideMethod("uh-o", delegatedFoo)
Эта линия будет бросать исключение компилятора: недостающие аргументы для метода delegatedFoo в классе MyClass
Q: Как можно идти о передаче делегата (ссылка) в пределах вызов с несколькими аргументами? (Это то, что даже может быть сделано в Scala?)
EDIT: быть более точными, то подпись будет выглядеть следующим образом:
def delegatedFoo(str: String): String = { return "OK" }
def addMyDelegatedMethod(delegate: (String) => (String))
def addMyDelegateOverrideMethod(foo: String, delegate: (String) => (String))
UPDATE: после рассмотрения ответа Паоло и делают некоторые более экспериментируя, насколько это возможно, я могу рассказать о проблемах (ошибках?), когда есть перегруженная подпись. (Я не стал бросать, что в моем примере выше, так как она не была использована - но только имея он появляется, чтобы дать мой компилятор головной боли):
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 имеет набор перегружен методы определены ... закомментировать метод перегрузки (или изменить его имя), и компилятор будет обрабатывать его в порядке ...: \
Паоло - Думаю, мне нужно сделать еще больше копания. Я тестировал пример в REPL, и он отлично работает (после вырезания кучи кода, связанного с зависимостями), но он просто не будет компилироваться в среде SBT, в которой я работаю. Поэтому я собираюсь немного поэкспериментировать, если ошибка неверно относится к другой проблеме - прежде чем я буду тратить на нее какое-то время. Спасибо за вход ... -mjk – mjk
Paolo - Кажется, насколько я могу судить, быть компилятором «ошибка». Я обновил вопрос, подробно расскажу о том, как дублировать. – mjk
Это не ошибка, а (известное) ограничение при работе с перегрузками метода.См. Это другое описание: http://stackoverflow.com/questions/7816547/can-i-get-a-function-from-an-overloaded-method-in-scala?rq=1 –