I was trying to learn the operator over-ridding in Ruby. So i used the
below in my IRB.

>> class Banner < String
>> def +
?> upcase
>> end
>> def -
?> downcase
>> end
>> end
=> nil
>> ban = Banner.new("hi")
=> "hi"
>> +ban
NoMethodError: undefined method `+@' for "hi":Banner
        from (irb):22
        from C:/Ruby193/bin/irb:12:in `<main>'

Now after seeing the error in the `IRB` i corrected definition of `+`
and `-` as below, which in turn fixed the code.

>> class Banner < String
>> def +@
>> upcase
>> end
>> def -@
>> downcase
>> end
>> end
=> nil
>> ban = Banner.new("hi")
=> "hi"
>> +ban
=> "HI"

But my confusion is with the logical necessity of that `@` operator?

Again I tried to over-ride `!` as below:

>> class Banner
>> def !
>> reverse
>> end
>> end
=> nil
>> !ban
=> "ih"
>> not ban
=> "ih"

But here I didn't need to use that `@` operator.

Can anyone help me to understand why `@` was needed with `+` and `-` but
not with `!`?

Thanks

-- 
Posted via http://www.ruby-forum.com/.