演算子以外の"&"の使い方
復習復習!
メソッド宣言時
& メソッド宣言の中で、最後のメソッド引数の名前の前に付けて、メソッドに渡されたブロックをその引数に代入できるようにする。
メソッド呼び出し時
メソッド呼び出しの中で、メソッドにまるでブロックのようにprocを渡すときにも使われる。
a, b = [1,2,3], [4,5] summation = Proc.new {|total,x| total + x} sum = a.inject(0, &summation) #=> 6 sum = b.inject(sum, &summation) # => 15
to_proc
to_procメソッドを持つオブジェクトなら、何でも & を付けられる。Symbolクラスにto_procが定義されて(1.8.7以降)おり、イテレータに渡すことが出来る。Symbolクラスのto_procメソッドが返すProcオブジェクトは、第一引数をレシーバとしてSymbol名のメソッドを呼び出し、引数として残りの引数を渡す。
words = %w( and but car ) uppercase = words.map &:upcase #=>["AND", "BUT", "CAR"]