Logan Capaldo wrote:
> On May 6, 2006, at 4:10 PM, Bira wrote:
> 
>>>
>> I think I still have a long way to go before I can write a decent,
>> Ruby-ish example :). This one is a little beyond my ability to
>> understand at a glance...
>>
>> What happens when I call Database.new(some_file) ? In which order to
>> the "new" and "initialize" methods get called?
>>
> Basically new calls initialize, and then returns the instance of the
> object. The normal implementation of new would look something like:
> 
> class Class
>    def new(*args, &block)
>      obj = self.allocate
>      obj.initialize(*args, &block)
>      obj
>    end
> end
> 
> My new does some extra work by defining the Record class based on
> some info in the file. There's a big problem with my code though and
> it's called Only one database per program!. Or at least only one at a
> time
> 
> e.g.
> 
> db1 = Database.new(file1)
> db2 = Database.new(file2)
> 
> if file2 has a different record format than file1, it's going to
> seriously mess up any interactions with db1. An alternative method
> would be of course to do something like
> 
> class Database
>    def initialize(file)
>        @Record =  Struct.new(...)
>        ...
>    end
> end

This "only one database per program" problem you refer to is actually a 
problem with my design. I wonder how to go around it.

I do want to be able to have two different Databases that use different 
Record formats, but still be able to access the fields via Struct-like 
accessors.

I realize that with this design it's not possible, since 
Database::Record refers only to a single class, not to different 
classes.

-- 
Posted via http://www.ruby-forum.com/.