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入門