------art_1914_14013178.1143106142635
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

let us wrap
const_get

begin
    const_get(...)
rescue NameError
   super(...)
end
 in order to get NoMethodError instead of a NameError

Cheers
Robert
On 3/23/06, Robert Klemme <bob.news / gmx.net> wrote:
>
> Jim Weirich wrote:
> > 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
>
> IMHO this is not thread safe.  If you need the method interface, you
> could do something like
>
> class Color
>    def self.method_missing(s,*a,&b)
>      if a.empty? && b.nil?
>        const_get s.to_s.upcase
>      else
>        super
>      end
>    end
> end
>
> :-)
>
>         robert
>
>
>


--
Deux choses sont infinies : l'univers et la bóŐise humaine ; en ce qui
concerne l'univers, je n'en ai pas acquis la certitude absolue.

- Albert Einstein

------art_1914_14013178.1143106142635--