redentis
7/4/2005 12:11:00 PM
Eric Mahurin wrote:
> --- Logan Capaldo <logancapaldo@gmail.com> wrote:
> > On Jul 3, 2005, at 3:31 PM, Eric Mahurin wrote:
> >
> > > Anybody know of a way to call an arbitrary method in the
> > > superclass? In the current method, you can use "super" to
> > call
> > > the same method of the superclass, but how do you call
> > another?
> > > The only way I can think of off hand is to alias the
> > > superclass methods to something else before creating the
> > > derived class definition. But, that seems kind of ugly.
> > It
> > > seems like there should be a way to call it directly using
> > > superclass or something.
>
> > self.class.superclass.
> > instance_method(:some_method).bind(self).call(*args)
>
> That is the magic I was looking for. Thanks.
>
> I think it would be nice if we had something like this in
> Object to make it easier (and faster when written in C):
>
> class Object
> def super_method(sym)
> self.class.superclass.instance_method(sym)
> end
> def super_send(sym,*args)
> super_method(sym).call(*args)
> end
> end
What scenario(s) do you think this would be useful in? Surely the whole
point of the OO principles of polymorphism and implementation hiding is
that you should never need to "call an arbitrary method in the
superclass".
The only case I can think of where you might want to access the
superclass implementation is in an overriding method in a subclass and
at that point 'super' does what you'd expect: gives you essentially
privileged access to the implementation in the super class.