*を使えば可変長引数を配列として受け取れるようだ。
引数の1つ前に*を入れれば、その位置の引数を配列として受け取れる。
def max(first, *rest)
max = first
rest.each {|x| max = x if x > max }
max
end
と書いて、
max(1,2,3)
と書けば、
first
が1
, rest
が[2,3]
になるようだ。ちなみに、C言語での可変長引数は以下のようになる。
以下は第1引数で渡す数字の個数を、残りの引数をデバッグプリントとする関数です。
#include
#include /* 可変長引数に必要な変数 */
void foo(int i, ...)
{
int j;
va_list ap;
va_start(ap, i); /* ポインタ引数apを引数iの次の位置に持っていく */
for (j = 0; j < i; j++) {
printf("%d\n", va_arg(ap, int)); /* 型を指定してapから、値をとりだす*/
}
va_end(ap);
}
int main(void)
{
foo(3, 1, 2, 3);
return 0;
}
でも可変長引数って基本使いませんよね。だから忘れちゃうんですよね;
0 件のコメント:
コメントを投稿