Ruby将块传递给块

时间:2011-09-21 03:53:54

标签: ruby closures

(1..5).each do|x| puts yield(x) end do |x| return x*2 end

在我的脑海中,这将循环1到5调用第一个块,它将屈服于第二个块并放入2,4,6,8,10

为什么这不起作用,最简单的方法是写这个。

2 个答案:

答案 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 }