succを複数回呼ぶには

id:ha-tan:20060430:1146408188のコードを書いているときに、複数回succを呼べてもいいかなと思いつきました。試しに以下のモジュールを書いてみました。

#!/usr/bin/env ruby

module Successor
  def succn(n = 1)
    obj = self
    n.times { obj = obj.succ }
    obj
  end
end

module DestructiveSuccessor
  def succn!(n = 1)
    obj = self
    n.times { obj = obj.succ! }
    obj
  end
end

class Integer
  include Successor
end

class String
  include Successor, DestructiveSuccessor
end

p 1.succn(3)       # => 4
p '0001'.succn(10) # => "0011"
s = '1'
p s.succn!(3)      # => "4"
p s                # => "4"