欲しかったので探したけど見つからなかったので書いてみた。
def iterate(init, &block) Enumerator.new do |y| loop do y << init init = block.call(init) end end end p iterate(1, &:succ).take(10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ブロックを渡している関係上引数の順序が逆だけど気にしない。
と言うか、すごく便利なのに本当に標準でないのか? 私が見つけられてないだけってことは…。Rubyist の皆さんは普段どうしているのだろう。