Confusion with unary operator overidding

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

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

Hope this helps,

Mike

On 2013-03-09, at 9:07 AM, “Kumar R.” [email protected] wrote:

end

=> “hi”

end
not with !?

Thanks


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

Mike S. [email protected]
http://www.stok.ca/~mike/

The “`Stok’ disclaimers” apply.

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

there is no @ operator, its part of the method name TO DIFFERATE between
obj + obj2 and +obj

! does not have a method for obj ! obj2 so it does not need an @ at the
unary name

same for methods that end with !, they only use that for this method
names when there is a non-! method too like gsub has a gsub! partner,
but replace is not called replace! because there is not an second method

On Sat, Mar 9, 2013 at 3:07 PM, Kumar R. [email protected] wrote:

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

class Banner < String

Inheriting from String is a bad idea. Really.

Cheers

robert