triangular_numbers枚举器yielder yield

时间:2014-02-05 21:51:43

标签: ruby yield enumerator

 triangular_numbers = Enumerator.new do |yielder|
 number = 0
 count = 1
     loop do
         number += count
         count += 1
         yielder.yield number
     end
 end
 5.times { print triangular_numbers.next, " " }
 puts

我知道你们之前都有回答这个问题。

我想了解更多关于正在发生什么的事情

我是否正确地说 yielder 是一个可能是哈希或数组的参数 yielder.yield数字基本上是将数字推送到该数组。

我也看到人们使用yielder<<数字,我假设你也可以使用 yielder.push(数字),它会做同样的事情。

另一件事我想知道为什么数字保留其价值。

1 个答案:

答案 0 :(得分:0)

不,它不是数据结构。它是一个对象 - Enumerator::Yielder的一个实例,如果你单击该链接,你会看到没有记录得很好!它是用C语言编写的,它唯一的方法是yield和别名<<。你应该把它留给Ruby核心来处理它自己。

它基本上类似于管道EnumeratorEnumerable方法在内部使用它来根据需要从枚举中获取项目。例如,Enumerator#next将从序列中获取下一个项目。 Enumerable中提供的方法更加全面,并且基于Enumerator提供的基本操作。