c:\>irb irb(main):001:0> Fixnum.class_eval do irb(main):002:1* original_add = instance_method(:+) irb(main):003:1> define_method(:+) do |other| irb(main):004:2* if other.kind_of?(String) irb(main):005:3> return String(self) + other irb(main):006:3> else irb(main):007:3* return original_add.bind(self).call(other) irb(main):008:3> end irb(main):009:2> end irb(main):010:1> end => # irb(main):011:0> irb(main):012:0* irb(main):013:0* irb(main):014:0* String.class_eval do irb(main):015:1* original_add = instance_method(:+) irb(main):016:1> define_method(:+) do |other| irb(main):017:2* if other.kind_of?(Fixnum) irb(main):018:3> return self + String(other) irb(main):019:3> else irb(main):020:3* return original_add.bind(self).call(other) irb(main):021:3> end irb(main):022:2> end irb(main):023:1> end => # irb(main):024:0> '1' + 1 => "11" irb(main):025:0> 1 + '1' => "11" irb(main):026:0> 1 + 1 => 2 irb(main):027:0> '1' + '1' => "11" irb(main):028:0>