【发布时间】:2011-09-21 03:53:54
【问题描述】:
(1..5).each do|x| puts yield(x) end do |x| return x*2 end
在我的脑海中,这将循环 1 到 5 调用第一个块,该块将让给第二个块并放入 2、4、6、8、10
为什么这不起作用以及最简单的方法是什么。
【问题讨论】:
(1..5).each do|x| puts yield(x) end do |x| return x*2 end
在我的脑海中,这将循环 1 到 5 调用第一个块,该块将让给第二个块并放入 2、4、6、8、10
为什么这不起作用以及最简单的方法是什么。
【问题讨论】:
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..5).each { |x| puts x*2 }
【讨论】: