引数の数が不定なメソッドの書き方
メソッドの定義時の引数に 「*変数名」 で定義し、メソッド実行後は、与えられた引数をまとめて「配列」として出力することができる。
書き方は下記の通り。
(fooメソッドを定義)
def foo(*args)
args
end
p foo(1, 2, 3) #=> [1, 2, 3]
また、設定した引数の数でない時にメソッドを実行した時は下記のようになる。
(Methメソッドに通常の引数と引数の数が不定な引数を設定し、値を配列で返す処理を設定)
def meth (arg, *args)
[arg, args]
end
(メソッド実行)
p meth(1) #=> [1, []] (*argsの方には引数を入れメソッドを実行していないので、[]が出力される)
p meth(1, 2, 3) #=> [1, [2, 3]] (最初の1つ目の引数は、argへ、残りの引数は*argsの方に「配列」として出力される)
*また、この時p meth(1, 2, 3).flattenのように、
flattenメソッドを実行することで、上記の二次元配列[1, [2, 3]]を一次元配列[1, 2, 3]とすることもできる。
p meth([], 1) #=> [[], [1]]
p meth(0, 1) #=> [0, [1]] (複数の引数を設定すると、2つ目は必ず、「配列」で返ってくる)
さらに、引数不定の引数を途中で定義したときは、下記のような結果になる。
(Aメソッドを定義し、引数不定の引数を定義)
def a(a, *b, c)
[a, b, c]
end
p a(1, 2, 3, 4, 5) #=> [1, [2, 3, 4], 5]
p a(1, 2) #=> [1, [], 2]
まとめ
引数の数が不定の時は、「*変数名」で定義し、出力時は配列として出力される。