From: Ross Bamford Date: 2006-06-02T09:17:16+09:00 Subject: Re: Adding an Increment Operator? On Fri, 2006-06-02 at 08:15 +0900, Dave Howell wrote: > As Logan pointed out in a different thread: > > > % cat increment.rb > > class Fixnum > > def increment > > self = self + 1 > > end > > end > > > > a = 1 > > a.increment > > > > > > % ruby increment.rb > > -:13: Can't change the value of self > > self = self + 1 > > ^ > > So, how WOULD I create an .increment operator? I get why I can't put it > in class Fixnum (well, I think I know why); Fixnums are symbol-ish-ly > unalterable. 5.increment should fail, for sanity's sake. Depending on what you want to do, maybe you could cheat: require 'delegate' class Fixbox < DelegateClass(Fixnum) def self.[](num); new(num); end def decrement; __getobj__ - 1; end def decrement!; __setobj__(decrement); end def increment; __getobj__ + 1; end def increment!; __setobj__(increment); end end f = Fixbox[3] # => 3 f.increment! # => 4 f # => 4 f.decrement! # => 3 f # => 3 :) -- Ross Bamford - rosco@roscopeco.REMOVE.co.uk