引数

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

デフォルト値を持つ引数は同時にキーワード引数となります。逆に言うと、キーワード引数はデフォルト値を持たなければなりません。