メソッド呼び出しで 配列を展開した変数列を渡す
def sum(a,b,c) print a+b+c,"\n" end a = [1,2,3] sum(*a) # -> sum(1,2,3) -> 6
同様にProcをブロックとして渡せる。
def foo
yield(2)
end
pr = proc {|i| i*i}
foo(&pr) #=> 4
逆に仮引数でまとめて受け取ったりProcとして受け取ったりできる。
def foo(*arg, &block) block.call arg[1] end foo(0,1,2) do |i| puts i #=> 1 end def test(*a) @b = [a] #正しくは、@b = a end def a = (b) #正しくは、a=(b) @a = b end
superとsuper(...)の違い。
class Foo
def initialize
end
end
class Bar < Foo
def initialize(a)
super
end
end
obj = Bar.new(1)
=> -:8:in `initialize': wrong # of arguments(1 for 0) (ArgumentError)
上のはバグります。引数なしの super は上の例では super(a) と見なされ るからです。呼び出したメソッドと異なる引数で呼び出すには引数を明示し ます。
class Foo
def initialize
end
end
class Bar < Foo
def initialize(a)
super() # <- 0個 の引数であることを明示している
end
end
obj = Bar.new(1)