I have a function with two parameter lists that I am trying to partially apply and use with currying. The second parameter list contains arguments that all have default values (but not implicit). Something like this:

 def test(a: Int)(b: Int = 2, c: Int = 3) { println(a + ", " + b + ", " + c); }

Now, the following is all fine:

 test(1)(2, 3);
 test(1)(2);
 test(1)(c=3);
 test(1)();

Now if I define:

 def partial = test(1) _;

Then the following can be done:

 partial(2, 3);

Can someone explain why I can't omit some/all arguments in 'partial' as follows:

 partial(2);
 partial(c=3);
 partial();

Shouldn't writing "partial" behave essentially the same way as "test(1)"? Can someone please help me figure out a way to achieve this?

Please help, I'm desperate!

EDIT - Since I can't answer my own question within 24 hours, I'll post my own answer here:

This is the best I could do myself so far:

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();

This way it works...

Edit
Report