Kernel#loop と同じですが、インデックスが付きます。意外と使うと思うのだが。Kernel#loop をオーバーライドしてもいいのだが、ここではやめておきました。
module Kernel def loop_with_index(i = 0) begin yield(i) end while (i += 1) end end
実行例。無限ループなので、[Ctrl] + C で中断して下さい。
loop_with_index do |i| print "\e[1G#{i} " sleep(0.5) end
意外と使うので、サポートして欲しいような。まあ、普段は
i = 0 loop do puts i i += 1 end
とするか、
i = 0 begin puts i end while (i += 1)
などとしている。下の方が見た目がいいかな。上の方がわかりやすいか。
※注記(2017/9/22)
すでに Enumerator#with_index が組み込みでサポートされています。
loop.with_index(10) do |_, i| puts i end
こんな感じです。
※再追記(2018/11/24)
この方がよいかな?
1.step {|i| puts i}