Search code examples
rubystringruby-1.9.3

Overwriting part of a string


Is there a simple way to overwrite a string, something like the following, or something similar?

s = "123456"
r1 = "abc"
s.loverwrite(r1) # => "abc456"
s.coverwrite(r1) # => "12abc6"  (or "1abc56")
s.roverwrite(r1) # => "123abc"

r2 = "abcdefghi"
s.loverwrite(r2) # => "abcdef"
s.coverwrite(r2) # => "bcdefg"  (or "cdefgh")
s.roverwrite(r2) # => "defghi"

Solution

  • Pretty easy with []=:

    class String
      def loverwrite(s)
        dup.tap{|result| result[0, s.length] = s[0, length]}
      end
    end