Background on why Ruby doesn't support ++

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

:slight_smile:

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