2016-09-07 7 views
-1

、我々はすべての正の整数を生成するには、このような何かを書くことができます:Rubyで発電機を書くには? Pythonでは

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

は、Rubyで同様の発電機を書くための方法はありますか?

答えて

2

それは非常に似ています:

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

あなたは怠惰列挙子をしたい:このように使用することができます

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

。 Ruby 2.3.1(少なくともRuby 2.2.0まで)では、Enumerator::Lazyで混合して自分で作ることができます。

しかし、必要なものが無限の整数ストリームであれば、Rangeオブジェクトを使うことができます。例:

(1 .. Float::INFINITY).take 10 
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]