如何在Ruby中编写生成器?

时间:2016-09-07 03:25:32

标签: ruby syntax generator

在Python中,我们可以编写类似的东西来生成所有正整数:

def integer():
  count = 0
  while True:
    count += 1
    yield count

有没有办法在Ruby中编写类似的生成器?

2 个答案:

答案 0 :(得分:2)

非常相似:

def integer
  Enumerator.new do |y|
    n = 0
    loop do
      y << n
      n += 1
    end
  end
end

可以这样使用:

integer.take(20).inject(&:+)
# => 190

答案 1 :(得分:1)

你想要一个懒惰的枚举器。在Ruby 2.3.1中(至少可以追溯到Ruby 2.2.0),您可以通过混合Enumerator::Lazy来自己创建一个。

但是,如果你想要的只是一个无限的整数流,你可以使用一个Range对象。例如:

git push --force origin tests