k01ken’s b10g

He110 W0r1d!

Rubyのメソッドの引数の*(アスタリスク)は何なのか?

開発環境は、Windows 7 Professional(32bit)+ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]。

調べてみると、可変長引数と言って、これを指定することで、呼び出す側で、任意の複数の引数を指定して、メソッド側で受け取ることができるみたいです。

def name(*msg)
	p msg
        p msg.length
end

name('takeshi','shirou','masaru')

実行結果

["takeshi", "shirou", "masaru"]
3

次に、配列を引数として渡してみると、

def name(*msg)
	p msg
        p msg.length
end

name(['takeshi','shirou','tarou'])

実行結果

[["takeshi", "shirou", "tarou"]]
1

さらに、引数に、配列や文字列や数値を入れてみます

def name(*msg)
	p msg.length
	for i in msg do
		if i.instance_of?(Array) then
			puts "配列です"
		elsif i.instance_of?(String) then
			puts "文字列です"
		elsif i.instance_of?(Fixnum) then
			puts "数字です"
		end
	end
end

name(['takeshi','shirou','tarou'],'masaru',110)

実行結果

3
配列です
文字列です
数字です

参考リンク
Rubyの引数いろいろ - Qiita
for文 - 繰り返し - Ruby入門
Ruby :: arrayかどうかチェックする [Tipsというかメモ]
複数の条件分岐(if...elsif...else...end) - 条件分岐 - Ruby入門