У меня есть функция с двумя списками параметров, которые я пытаюсь частично применить и использовать с currying. Второй список параметров содержит аргументы, которые имеют значения по умолчанию (но не подразумеваемые). Что-то вроде этого:
def test(a: Int)(b: Int = 2, c: Int = 3) { println(a + ", " + b + ", " + c); }
Теперь все нормально:
test(1)(2, 3);
test(1)(2);
test(1)(c=3);
test(1)();
Теперь, если я определяю:
def partial = test(1) _;
Тогда можно сделать следующее:
partial(2, 3);
Может кто-нибудь объяснить, почему я не могу опустить некоторые/все аргументы в "partial" следующим образом:
partial(2);
partial(c=3);
partial();
Не следует ли писать "частичные" по существу так же, как "test (1)"? Может кто-то, пожалуйста, помогите мне выяснить способ достижения этого?
Пожалуйста, помогите, я в отчаянии!
EDIT. Поскольку я не могу ответить на свой вопрос в течение 24 часов, я отправлю свой собственный ответ здесь:
Это лучшее, что я мог сделать до сих пор:
class Test2(val a: Int) {
def apply(b: Int = 2, c: Int = 3) { println(a + ", " + b + ", " + c); }
}
def test2(a: Int) = new Test2(a);
def partial2 = test2(1); // Note no underscore
test2(1)(2, 3);
test2(1)(2);
test2(1)(c=3);
test2(1)();
partial2(2, 3)
partial2(2);
partial2(c=3);
partial2();
Таким образом, он работает...