From: transfire@... Date: 2006-07-12T23:46:41+09:00 Subject: Re: prototype design pattern What criteria for "good"? I'm not aware of any lib that preports "enterprise quality" or anthing like that. I've played with the ideas though. Prototype-based OOP interests me. On the surface it appears as simple as aliasing an Object#new to #$dup and instantiation a bunch of initiaial prototypes for each class -- of course some classes won't play nice woth this, like File for instance. Other than that I also played around with this: module ProtobaseKernel def meta ; (class << self; self; end) ; end def obj(&blk) o = Object.new o.instance_eval(&blk) h = {} iv = o.instance_variables iv.each { |k| h[k[1..-1].to_sym] = o.instance_eval{ instance_variable_get(k) } } o.meta.class_eval { h.each { |k,v| case v when Proc #define_method(k){ |*args| v[*args] } attr_reader k else attr_accessor k end } } o end def fn(&blk) proc(&blk) end def new(o=nil) return o.clone if o return self.clone end end class Object include ProtobaseKernel end # Example ----------------- person = obj { @name = '' @age = 0 @announce = fn { |x| "#{x}, #{name} is #{age}" } } person.name = 'Tom' person.age = 35 puts person.announce['Peter']