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