インデックス付きの無限ループ(Ruby)

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)

などとしている。下の方が見た目がいいかな。上の方がわかりやすいか。