引数
Xtalは関数呼び出しの際、引数の数が少なかったり、逆に多かったりするとエラーとなります。
foo: fun(a, b){} foo(); //=> throw ArgumentError foo(0, 1, 2); //=> throw ArgumentError foo(3, 4); //=> OK
JavaScript等はエラーにならないことを利用して、デフォルト引数を表現するイディオムがありました。Xtalではそういうテクを使う必要はなく、言語仕様としてデフォルト引数、そしてキーワード引数をサポートしています。
foo: fun(a:10, b:20){ a+b .p; } foo(5); //=>25 foo(8, 9); //=>17 foo(3, b:10); //=>13 foo(); //=>30 foo(b:1); //=>11 foo(a:1); //=>21 foo(b:1, a:1); //=>2
デフォルト値を持つ引数は同時にキーワード引数となります。逆に言うと、キーワード引数はデフォルト値を持たなければなりません。