On Wed, 19 Jul 2006 14:56:24 +0200, Brandon Coleman
[email protected]
wrote:
Yes it is! but I would like to be able to add and delete objects on the
fly. For instance I want to add Toyota: could the objects be stored in
an array so that I could add an object and delete an object when I
needed?
I think that the easiest way to achieve something like this is to use a
hash.
Another way would be to try and setup something with
Kernel#method_missing. That way you could redirect invalid method calls
to
the hash, or whichever way you use to track things internally. The docs
for Kernel#method_missing:
http://www.ruby-doc.org/core/classes/Kernel.html#M002946
Here is an example using both methods:
----- Code -----
class Dealership
def initialize
@items=Hash.new
end
def add(name,new_item)
@items[name]=new_item
end
def
@items[name]
end
def method_missing(methId)
str = methId.id2name
self.
end
end
class Honda
def to_s
return “Honda”
end
end
class Ford
def sound_horn
puts “You sound the Ford’s horn!”
end
end
dealership_obj = Dealership.new
dealership_obj.add(“honda”, Honda.new)
dealership_obj.add(“ford”, Ford.new)
puts dealership_obj[“honda”]
dealership_obj[“ford”].sound_horn
dealership_obj.ford.sound_horn
----- End code -----
Talking about it brought me to this example:
dealership.modify(toyota.modify(shelfb.add(bin1.new(carburetor)))).
which IS what I think I would like to do, I just think that code is ugly
and illedgible, and so I feel there is probably a better way.
By putting the hash and method_missing inside the car brand classes and
classes that will be contained by them, your given example would look
like:
dealership.toyota.shelfb.add(‘bin1’,Bin1.new(carburetor))
Cheers,
Wes