Cmmでは、関数へ渡す引数の数が関数宣言式で宣言した引数の数より多くても、 少なくても文法的なエラーではありません。
極端な例として、
func ManyManyArgs (a, b, c, d, e, f, g, h, i, j, k) {
//省略
}
という定義の関数を、
ManyManyArgs () ;
と呼び出してもエラーにはなりません。しかし、上記のように、引数を全くと もなわずに、関数、ManyManyArgs() を呼び出したときに、関数本体で、a, b などの引数を参照している式を実行してしまうとエラーとなります。
上記の関数ManyManyArgsを呼びだし方と、利用できる引数の関係は、以下のよ うになります。
呼びだし時の引数 | 関数本体でアクセスできる変数 |
ManyManyArgs() | なし |
ManyManyArgs(1) | a |
ManyManyArgs(1,2) | a, b |
ManyManyArgs(1,2,3) | a, b, c |
ManyManyArgs(1,2,3, 4) | a, b, c, d |
: | : |
: | : |
このように、Cmmの関数は可変引数に対応できますが、その場合の関数本体か らの変数アクセスには注意が必要となります。
また、このような可変引数に柔軟に対応できるように、Cmmでは、関数本体内 でのみ利用できる特殊変数を定義しています。