Ruby 收益率和 For 循环

Ruby Yield and For Loop

我正在学习 each 与 Ruby 中的 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}

我只是不明白第一个示例是如何工作的。谢谢你的帮助。

for i in MyEachThing.new
  p i
end

类似于:

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

这意味着,您正在 MyEachThing 实例上调用 each 方法并将 i 传递给块。

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

yield i 等同于:block.call(i) 并且您的块只是打印 i.

的值