The following message is a courtesy copy of an article that has been posted to comp.lang.misc as well. Yukihiro Matsumoto <matz / netlab.co.jp> writes: > If allocation at `new' uses its arguments, the argument behavior is > fixed, size of internal buffer in this case. If you want to make > subclass of Array, and initialize it by some arguments, you'll meet > restriction about arguments to `new'. But say I was implementing a sortable array, where I wanted to allocate twice the requested storage: the first half to hold the values, the second half pointers to these values. (Don't ask me why, because I have no idea. It's a silly example). class MyArray < Array def MyArray.new(size) super(size*2) end def initialize(size) self.[size/2...size] = (0...size/2).to_a end end Now, I know I could do this using delegation, but in this case subclassing seems natural. If I hadn't read this thread, I'd expect that MyArray.new(3) would call MyArray.initialize(6). Or maybe I wanted an array of pre-computed primes: class PrimeArray < Array def initialize for i in 0...size self.[i] = nextPrime end end end It seems to me that logically, 'new' allocates the storage for the object, and 'initialize' initializes that store. I know I must be missing something obvious here. Help! Regards Dave