ES wrote:
> Daniel Berger wrote:
> > Hi all,
> >
> > Well, I *think* it's the facade pattern.  Anyway, I'm trying to do
> > something like this:
> >
> > class Foo < String
> >    def method_a
> >       Bar.method_a(self)
> >    end
> >    def method_b
> >       Bar.method_b(self)
> >    end
> > end
> >
> > This is easy enough to do by hand for a few methods, but what if I
have
> > many methods from Bar I want to use?
> >
> > I thought maybe there was a trick with Forwardable I could use, but
I
> > don't see how.  Any ideas on how to shortcut this?
>
> You left too quick :) You are looking at something like this:
>
> class Class
>    def forward(mod, *methods)
>      methods.each do |method|
>        # Substitute mod with const_get(mod) if you want to use
:ModName
>        define_method(method) {|| mod.send(method, self)}
>      end
>    end
> end
>
> class A
>    def A.foo(x)
>      puts "A.foo: #{x}"
>    end
> end
>
> class B
>    forward A, :foo
> end
>
> B.new.foo  # => A.foo
>
> > Regards,
> >
> > Dan
>
> E
>
> --
> template<typename duck>
> void quack(duck& d) { d.quack(); }


Thank you - that will work beautfully. :)

Regards,

Dan