2011-09-21 190 views
0
(1..5).each do|x| puts yield(x) end do |x| return x*2 end 

在我的頭上這將循環1〜5調用的第一個塊將產生於第二塊,並把2,4,6,8,10
紅寶石傳遞塊塊

爲什麼這不工作,什麼是寫這個最簡單的方法。

回答

3

yield在方法內工作。來自「Programming Ruby」的引用:

在該方法中,可以使用yield語句調用該塊,就好像它是一個 方法本身一樣。

所以,如果你想使這段代碼工作,你可以把它改成這樣的:

def f(n) 
    (1..n).each do |x| 
    puts yield(x) 
    end 
end 

f(5) do |x| 
    x * 2 
end 

如果你不想定義方法,你應該把塊放入變量和然後使用它:

b = Proc.new{|x| x *2 } 

(1..5).each do |x| 
    puts b.call(x) 
end 
1

最簡單的方法來寫這個:

(1..5).each { |x| puts x*2 }