Ruby Yield和For Loop

时间:2015-10-06 02:47:55

标签: ruby for-loop return each yield

我正在通过Ruby中each vs for循环的简单教程。这应该是一个更简单的例子,但由于某种原因,我不理解yield语句和for循环之间的相互作用。

class MyEachThing
  def each
    yield 1
    yield 42
    yield 2
    yield 42
    yield 3
  end
end

for i in MyEachThing.new
  p i
end
# >> 1
# >> 42
# >> 2
# >> 42
# >> 3

我编写的下一个例子中的收益对我来说很有意义:

def calling
    p yield(45)
end

calling {|i| i*2}

我只是不了解第一个例子的工作原理。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

for i in MyEachThing.new
  p i
end

与此类似:

MyEachThing.new.each do |i|
  p i
end

表示您在each实例上调用MyEachThing方法并将i传递给该块。

并且yield相当于:block.call表示您使用传递的参数调用块(在本例中为i)。

yield i相当于:block.call(i),您的广告块只打印i的值。