问题“Meaningofthewordyield”提到了Enumerator::Yielder#yield方法。没用过,不知道什么情况下会有用。当您想创建一个无限的项目列表(例如埃拉托色尼筛网)以及需要使用外部迭代器时,它是否主要有用? 最佳答案 “HowtocreateaninfiniteenumerableofTimes?”谈论构造和惰性迭代器,但我最喜欢的用法是用附加功能包装现有的Enumerable(任何可枚举的,无需知道它到底是什么,是否无限等)。一个简单的例子是实现each_with_index方法(或者更一般地说,wi
我最近开始阅读《ProgrammingRuby1.9&2.0》这本书。它显示了显式枚举器的技巧triangular_numbers=Enumerator.newdo|yielder|number=0count=1loopdonumber+=countcount+=1yielder.yieldnumberendend5.times{printtriangular_numbers.next,""}puts我想知道为什么这个yielder.yield会暂时离开loop并返回number的值,直到创建下一个枚举器对象。当循环block内的yield时,它似乎与通常情况不同。我查看APIdock
考虑这样一个简单的枚举器:natural_numbers=Enumerator.newdo|yielder|number=1loopdoyielder.yieldnumbernumber+=1endend我的问题是:为什么ruby要求我们在yielder对象上调用yield?换句话说:为什么我们不能将yielder.yieldnumber替换为yieldnumber?在这个例子中,如果允许的话,它看起来是一样的。是否有以非平凡的方式使用yielder的示例?有的话可以给一份吗?如果不是,yielder的目的是什么?谢谢。 最佳答案