From: ara.t.howard@... Date: 2006-07-13T07:57:58+09:00 Subject: Re: prototype design pattern On Thu, 13 Jul 2006, Pete wrote: > Can't imagine how it could be simpler... > > class SomeUselessClass > attr_accessor :a, :b, :c > def initialize > @a, @b, @c = 1, 2, 3 > end > end > > prototype = SomeUselessClass.new > prototype.a = 7 > > // create instances from prototype > o1 = prototype.clone > o2 = prototype.clone > o3 = prototype.clone > > cheers > peter mostly succinctness, but also semantics. cloning a prototype should not copy it's instance variables, but rather stamp out a new instance - sort of like a constructor. here's a snippet from my latest branch: jib:~/eg/ruby/prototype/prototype-0.1.0 > cat samples/d.rb require 'prototype' proto = prototype{ attributes 'a' => 1, 'b' => 2, 'c' => 3 } %w( a b c ).each{|attr| p proto.send(attr)} clone = proto.clone proto.c = 42 %w( a b c ).each{|attr| p proto.send(attr)} %w( a b c ).each{|attr| p clone.send(attr)} jib:~/eg/ruby/prototype/prototype-0.1.0 > ruby -Ilib samples/d.rb 1 2 3 1 2 42 1 2 3 note that this proto = Prototype{ attributes 'a' => 1, 'b' => 2, 'c' => 3 } or, even shorter proto = Prototype{ a 1; b 2; c 3 } are the same, but more, than this class SomeUselessClass attr_accessor :a, :b, :c def initialize @a, @b, @c = 1, 2, 3 end end prototype = SomeUselessClass.new actually - to have the literal equiv your code would need to be closer to class SomeUselessClass ATTRIBUTES = %w( a b c) ATTRIBUTES.each do |a| attr_accessor a alias_method "#{ a }?", "#{ a }" end def self.attributes() ATTRIBUTES end def initialize @a, @b, @c = 1, 2, 3 end end prototype = SomeUselessClass.new and actually there's even a bit more.. and it's not even golfing! ;-) -a -- suffering increases your inner strength. also, the wishing for suffering makes the suffering disappear. - h.h. the 14th dali lama