Sean O'Halpin
7/13/2006 1:46:00 AM
On 7/12/06, ara.t.howard@noaa.gov <ara.t.howard@noaa.gov> wrote:
> 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
>
>
Gosh! Blink and I miss the fun. Ironically, I've been using traits +
some sugar for something like this but your implementation is more -
well - prototypey! Nice work (again).
Regards,
Sean