Robert Klemme wrote:
> Sam Kong wrote:
>>     end
>>         def blue
>> puts Color.red
>> puts Color.blue
>> 
>> 
>> Is this one of design patterns, or just a simple idiom?
>> It's similar to a factory method pattern but it's not according to the
>> definition.
>> Is there any name for it?
> 
> Since you invoke a class's method "new" like any other method of any
> other object (no special syntax) you can say with some justification
> that all classes are basically factories.
> 
> IMHO your example is not optimal because it wastes resources.  Since
> Color is immutable anyway constants seem a better choice:
> 
> Color = Struct.new :r, :g, :b
> class Color
>    def to_s
>      sprintf "R: 0x%02x, G: 0x%02x, B: 0x%02x", self.r, self.g, self.b
>    end
> 
>    RED   = new 0xFF, 0x00, 0x00
>    BLUE  = new 0x00, 0x00, 0xFF
>    GREEN = new 0x00, 0xFF, 0x00
> end

I was thinking along the same lines, but I do like the method interface 
(e.g. Color.red over Color::RED).  My suggestion would have been 
something like:

  class Color
    ...
    class << self
      def red
        @red ||= new 255, 0, 0
      end
      ...
    end
  end

--
-- Jim Weirich

-- 
Posted via http://www.ruby-forum.com/.