部分的に適用してカリー化で使用しようとしている 2 つのパラメーター リストを持つ関数があります。2 番目のパラメーター リストには、すべて既定値を持つ (ただし、暗黙的ではない) 引数が含まれます。このようなもの:
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();
このように動作します...