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(数字),它会做同样的事情。
另一件事我想知道为什么数字保留其价值。
答案 0 :(得分:0)
不,它不是数据结构。它是一个对象 - Enumerator::Yielder
的一个实例,如果你单击该链接,你会看到没有记录得很好!它是用C语言编写的,它唯一的方法是yield
和别名<<
。你应该把它留给Ruby核心来处理它自己。
它基本上类似于管道,Enumerator
和Enumerable
方法在内部使用它来根据需要从枚举中获取项目。例如,Enumerator#next
将从序列中获取下一个项目。 Enumerable
中提供的方法更加全面,并且基于Enumerator
提供的基本操作。