2011-11-12 10 views

答えて

3

最後のメソッドのパラメータの前にある&シンボルは、パラメータとしてのブロックの明示的な定義を意図しているからです。

あなたのケースでは、あなたが2つの方法があります: 1)の代わりにブロックのプロシージャ・パラメータを使用します。

def iterate(ary, code) 
    ary.each_with_index do |n, i| 
    ary[i] = code.call(n) 
    end 
end 

iterator = Proc.new do |n| 
    n ** 2 
end 

p iterate([1,2,3], iterator) # => [1, 4, 9] 

または2)の代わりにprocの作成のブロックを使用します。

def iterate(ary, &code) 
    ary.each_with_index do |n, i| 
    ary[i] = code.call(n) 
    end 
end 

p iterate([1,2,3]) { |n| n ** 2 } # => [1, 4, 9] 
1

私はあなたが(むしろブロックより)PROCに渡しているようだと思う、あなたはドン:私は違うことをしようが、私はこれが動作しない理由としてわからないよ周りのヌードリングですメソッド定義内のcodeパラメータの前に&が必要です。