Hi All,
I’m a big Ruby fan and I’m not trying to complain.
I’m just curious as to why Ruby doesn’t support the ++ or – operators.
Is there some syntactical ambiguity that’s associated with it or
something.
Anyone know the history on this deliberate omission?
Thanks!
Adam
On Wed, Aug 12, 2009 at 11:20 PM, Adam L.[email protected]
wrote:
Anyone know the history on this deliberate omission?
Matz addressed this in ruby-talk 2710:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2710
HTH!
Shajith
On Thu, Aug 13, 2009 at 11:31 AM, Robert
Klemme[email protected] wrote:
incremented.
Makes sense, though strictly speaking x++ could be syntactic sugar for
x+=1 or x =x +1
but this would probably be very confusing for many folks for the very
reason you gave.
Cheers
Robert
Don’t forget there’s already
x.next
although there is not the orthogonal x.prev, which seems like the
Principle of Most Surprise in effect :-). One way to rectify that is
to open up Integer yourself:
class Integer
def prev
self - 1
end
end
2009/8/13 Shajith C. [email protected]:
On Wed, Aug 12, 2009 at 11:20 PM, Adam L.[email protected] wrote:
Anyone know the history on this deliberate omission?
Matz addressed this in ruby-talk 2710:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2710
Basically it is a consequence of the decision to make integers
immutable which makes assignment necessary for a variable which is
incremented. I guess Matz wanted to make this explicit, hence “+=”
Co.
Otherwise you need a counter class, e.g.
Counter = Struct.new :value do
def initialize(x = 0)
self.value = x
end
def plusplus
self.value += 1
end
alias incr plusplus
def minusminus
self.value += 1
end
alias decr minusminus
end
Kind regards
robert
2009/8/13 Mark T. [email protected]:
self - 1
end
end
There is also #succ and #pred. But this is not the point: all of them
work by returning a different object. You can easily verify by
looking at the result’s #object_id. Operators ++ and – in C++ on the
other hand change the object (int, long etc.) itself. The difference
is whether you will have aliasing or not.
Kind regards
robert