Jon*_*nah 5 ruby yield enumerator
考虑一个像这样的简单枚举器:
natural_numbers = Enumerator.new do |yielder|
number = 1
loop do
yielder.yield number
number += 1
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么ruby要求我们在yielder对象上调用yield?换句话说:为什么我们不能代替yielder.yield number用yield number?在这个例子中,如果允许的话,它看起来是一样的.有没有以非平凡的方式使用yielder的例子?如果是这样,你能给一个吗?如果没有,yielder的目的是什么?
谢谢.
不能 100% 确定这是否是原因,但yield单独(总是)适用于提交给调用方法的块yield:在您的情况下,包含赋值的方法natural_numbers;它不可能执行所需的操作Enumerator,即发出 Enumerator 元素。尽管名称相同,但Yielder#yield它是一个方法,而 Ruby 的yield是一个声明。
换句话说,不可能实现可以Enumerator与语句一起使用的构造函数yield。