Ezra Zygmuntowicz wrote: > On Oct 20, 2007, at 10:28 PM, Ben Tilly wrote: > >> Like initialize. Or create objects of that type. >> I would make sure that Prototype's new method would create a new class >> Thanks, >> Ben >> -- >> Posted via http://www.ruby-forum.com/. >> > > http://codeforpeople.com/lib/ruby/prototype/prototype-2.0.0/README If I'd seen that before I implemented mine, I would have just shown that. However I already have another one. I did borrow some ideas from that one. Here goes: class PrototypeClass attr_reader :prototype def initialize (*prototype) @prototype = prototype[0] end def new (*definitions) new_class = Class.new(self.class) for definition in definitions new_class.module_eval definition end return new_class.new(self) end def def (definition) self.class.module_eval "def #{definition} end" end def include (mod) self.class.module_eval "include #{mod}" end end Prototype = PrototypeClass.new(nil) And here is a sample of usage: @foo = Prototype.new %q{ attr_accessor :name } @bar = @foo.new @baz = @bar.new @foo.name = "foo" @bar.name = "bar" @baz.name = "baz" def test_greet try_greet = lambda {|obj| if obj.respond_to? :greet obj.greet(obj.name) else puts obj.name puts "Object #{obj.name} (#{obj.id}) cannot greet" end } try_greet[@foo] try_greet[@bar] try_greet[@baz] end test_greet() @bar.def %q{ greet (name) puts "Greeting from #{name} (id #{self.id})" } puts "Defined bar.greet" test_greet() module Mod def greet (name) puts "Hello from #{name} (#{self.id})" end end @foo.include(Mod) puts "Included module" test_greet() Cheers, Ben -- Posted via http://www.ruby-forum.com/.