我有一个带有两个参数列表的函数,我试图部分应用并与柯里化一起使用。第二个参数列表包含所有具有默认值(但不是隐式的)的参数。像这样的东西:
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();
写“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();
这样就可以工作了...