指定した回数分String#succ

あぁっ、String#succ が 引数回数分 succ してくれたら!
From: http://d.hatena.ne.jp/babie/20060428/p4

ということでやってみました。

class String
  alias_method :succ_orig, :succ
  def succ(count=1)
    count = count.to_i
    if count < 1
      return self.dup
    elsif count == 1
      return self.succ_orig
    else
      return self.succ_orig.succ(count-1)
    end
  end
end

負の値を取ったりしたときは逆方向に動かそうかと思ったけど逆のことをするメソッドがなかった。

それにしても普通の例題などはやる気が起きないのに、メタプログラミングばっかり食指が動いてしまう。何故だろう。

追記(06/04/29 1:32)

...
259:iz
SystemStackError: stack level too deep
...

再帰を使っているため、うちの環境では259以上の引数を取るとエラーになるようです。継続を使って書き換えたりするとよいかも。

追記(06/04/29 19:59)

d:id:walf443:20060429:1146302741で任意のメソッドで同様のことが出来るメソッドObject#repeatを書いてみました。