(1..5).each do|x| puts yield(x) end do |x| return x*2 end
在我的脑海中,这将循环1到5调用第一个块,它将屈服于第二个块并放入2,4,6,8,10
为什么这不起作用,最简单的方法是写这个。
答案 0 :(得分:3)
yield
在方法中起作用。引用“编程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)
最简单的写法:
(1..5).each { |x| puts x*2 }