У меня есть функция с двумя списками параметров, которые я пытаюсь частично применить и использовать с каррированием. Второй список параметров содержит аргументы, которые имеют значения по умолчанию (но не неявные). Примерно так:
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(2);
partial(c=3);
partial();
Не должно ли написание «частичного» вести себя по существу так же, как «test (1)»? Может кто-нибудь, пожалуйста, помогите мне найти способ достичь этого?
Пожалуйста, помогите, я в отчаянии!
РЕДАКТИРОВАТЬ - Поскольку я не могу ответить на свой вопрос в течение 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();
Так оно и работает ...