On Jan 6, 2006, at 10:35 AM, Bojan Mihelac wrote:

> Hi all,
> I am new to Ruby and am trying to overload "+" operator on Integer  
> class, without success.
>
> class TestNum < Integer
>  def +(other)
>       self.value - other
>  end
> end
>
> puts TestNum.new(5)+5; # should return 0
>
> I know that it should be simple, but.... any help appreciated.

Ruby provides the coerce method, for hooking into its math routines:

 >> class TestNum
 >>   def initialize( value )
 >>     @value = value
 >>   end
 >>   attr_reader :value
 >>   def +( other )
 >>     if other.is_a? self.class
 >>       value + other.value
 >>     else
?>       value + other
 >>     end
 >>   end
 >>   def coerce( other )
 >>     [self.class.new(other), self]
 >>   end
 >> end
=> nil
 >> tn = TestNum.new(5)
=> #<TestNum:0x31d2b8 @value=5>
 >> tn + 5
=> 10
 >> tn + tn
=> 10
 >> 5 + tn
=> 10

Hope that helps.

James Edward Gray II