[#1263] Draft of the updated Ruby FAQ — Dave Thomas <Dave@...>

33 messages 2000/02/08

[#1376] Re: Scripting versus programming — Andrew Hunt <andy@...>

Conrad writes:

13 messages 2000/02/15

[#1508] Ruby/GTK and the mainloop — Ian Main <imain@...>

17 messages 2000/02/19
[#1544] Re: Ruby/GTK and the mainloop — Yasushi Shoji <yashi@...> 2000/02/23

Hello Ian,

[#1550] Re: Ruby/GTK and the mainloop — Ian Main <imain@...> 2000/02/23

On Wed, Feb 23, 2000 at 02:56:10AM -0500, Yasushi Shoji wrote:

[#1516] Ruby: PLEASE use comp.lang.misc for all Ruby programming/technical questions/discussions!!!! — "Conrad Schneiker" <schneiker@...>

((FYI: This was sent to the Ruby mail list.))

10 messages 2000/02/19

[#1569] Re: Ruby: constructors, new and initialise — Yukihiro Matsumoto <matz@...>

The following message is a courtesy copy of an article

12 messages 2000/02/25

[ruby-talk:01570] Re: Ruby: constructors, new and initialise

From: Dave Thomas <Dave@...>
Date: 2000-02-25 03:43:17 UTC
List: ruby-talk #1570
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:

> |> some classes do not invoke `initialize' in their `new'
> |> method.  They are Array, Regexp, IO (and its subclasses),
> |> Hash, String, Thread, Class, and Module.  
> |> # I'm feeling something left.

,,,

>   * these classes define their own version of `new' rather than using
>     generic `new' defined in Object class.  these `new' methods
>     use argument to allocate object, before calling `initialize' if any.
> 
> The latter is more significant.  The `initialize' trick works well
> only if the arguments are used to initialize, not to allocate object.
> 
> For example, `new' of Array class uses its argument to determine
> allocation size of internal buffer.  Calling `initialize' in the
> method is useless, because meaning of an argument is already fixed.

If we take Array as an example, why can't the internal 'new' method do
the allocation, and then call .initialize with the parameters. Agreed,
there's no allocation that .initialize can do, but it might still be
interested in the arguments anyway.

Say I wanted a subclass of array that stored only uppercase
strings. If .initialize was called, I could write it as:

     class UpperArray < Array
       def initialize(*args)
         if args.length > 1 and String === args[1].type
           each do |v| v.upcase!  end
         end
       end

       def [](*args) ...
       end
     end

This seems pretty natural. Even though the meaning of the argument is
fixed by 'new', we can still use it to add value.

Is the performance overhead significant?


Regards


Dave

In This Thread