The following message is a courtesy copy of an article
that has been posted to comp.lang.misc as well.

Hi,
Dave Thomas <Dave / Thomases.com> writes:

|Yukihiro Matsumoto <matz / netlab.co.jp> writes:
|
|> `initialize' trick requires two things:
|> 
|>   * `new' accepts arbtrary number of arguments
|>   * `new' does not use arguments to allocate object,
|>     just pass to `initialize'
|
|Now I know I'm being stupid here. If Array.new did the object
|allocation, and then passed all its arguments to initialize to do
|further initialization on that object, it seems we get the best of
|both worlds. I don't see that it's necessary for .initialize to do the 
|allocation (any more than Dave.initialize allocates the underlying
|memory for a Dave object--it may create instance variables, but
|there's still the object structure allocated by New). 

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'.

I think reallocation in Array#initialize can be compromised.
I'm not sure whether this workaround goes well for other classes,
But it was OK for Array, Hash, String, and Dir at least.
I hacked last weekend.
							matz.