rubyのメソッド引数の復習1

アスタリスク(*)がついた引数の扱いにちょっと迷ったというか、忘れてた(!)ので復習。


irb(main):001:0> a = ["abc", "def", "ghi"]
=> ["abc", "def", "ghi"]
irb(main):003:0> p a.to_a
["abc", "def", "ghi"]
=> nil
irb(main):004:0> b = [1, 2, 3]
=> [1, 2, 3]
irb(main):005:0> p b.to_a
[1, 2, 3]
=> nil
と、上記のように配列を二つ用意しておく。
可変引数を取ろうとして、こういう風に宣言すると

irb(main):007:0> def show(i..)
irb(main):008:1> end
SyntaxError: compile error
(irb):7: syntax error
def show(i..)
^
from (irb):8
そんな宣言はできん、と、怒られる。(まぁ当然か)
なので、こういう風にやると、

irb(main):009:0> def show( *a)
irb(main):010:1> p a
irb(main):011:1> end
=> nil
メソッドを定義することができて、
こういう風にアスタリスクつきで引数を渡すと

irb(main):012:0> show(3, *b)
[3, 1, 2, 3]
=> nil
irb(main):013:0> show(3, *a)
[3, "abc", "def", "ghi"]
=> nil
irb(main):014:0> show( "iroha", *a)
["iroha", "abc", "def", "ghi"]
=> nil
irb(main):030:0> show(b , *a)
[[1, 2, 3], "abc", "def", "ghi"]
=> nil
参考までにアスタリスクがつかない定義だと

irb(main):016:0> def showb(d)
irb(main):017:1> print d.to_s
irb(main):018:1> end
=> nil
irb(main):019:0> showb(*a)
ArgumentError: wrong number of arguments(3 for 1)
from (irb):19:in `showb'
from (irb):19
from :0
当然のようにエラーになる。
おわり。