2011-09-21 160 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 }