5

考虑一个像这样的简单枚举器:

natural_numbers = Enumerator.new do |yielder|
  number = 1
  loop do
    yielder.yield number
    number += 1
  end
end

我的问题是:为什么 ruby​​ 要求我们在 yielder 对象上调用 yield?换一种说法:为什么我们不能用yielder.yield number替换yield number?在这个例子中,如果允许的话,它看起来是一样的。是否有以非平凡方式使用 yielder 的示例?如果可以,可以给一个吗?如果不是,那么yielder的目的是什么?

谢谢。

4

1 回答 1

3

不是 100% 确定这是否是原因,但yield单独(始终)适用于提交给调用方法的块yield:在您的情况下,该方法包含natural_numbers赋值;并且它不可能执行所需的操作Enumerator,即发出 Enumerator 元素。虽然名称相同,但是Yielder#yield是一个方法,而 Rubyyield是一个语句。

换句话说,不可能实现Enumeratoryield语句一起使用的构造函数。

于 2011-12-27T09:37:30.063 回答