Posted at

可変長引数を定義して、引数を渡さないとメソッド内では空配列になる。

More than 3 years have passed since last update.

タイトルの通りです。

可変長引数の引数に配列を渡した時に、*を付けなかった場合と付けた場合で試してみました。

①で b.inspect が空配列になっています。


① *を付けなかった場合

可変長引数*bには値が渡されていません。

def foo(a, *b)

puts "a:#{a.inspect}, b:#{b.inspect}"
end

data = [1, 2, 3]
foo(data)


結果

a:[1, 2, 3], b:[]



② *を付けた場合

可変長引数*bに、配列[2, 3]が渡されています。

def foo(a, *b)

puts "a:#{a.inspect}, b:#{b.inspect}"
end

data = [1, 2, 3]
foo(*data)


結果

a:1, b:[2, 3]



補足

inspectじゃなくても同じでした。

def foo(a, *b)

puts "a:#{a}, b:#{b}"
end

data =[1, 2, 3]
foo(data)
foo(*data)


結果

a:[1, 2, 3], b:[]

a:1, b:[2, 3]