我正在通过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}
我只是不了解第一个例子的工作原理。谢谢你的帮助。
答案 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
的值。