> > > > Hi,
> > > > >What if you want to reopen _without_ the "around" semantics?
> > > > I thought we need to remove the previous one first.
> > > > >Could we have these two variations:
> > > > >
> > > > >class Foo < Foo # <-- This is a type error in 1.8
> > > > > def foo; super; end # AROUND
> > > > >end
> > > > >
> > > > >class Foo
> > > > > def foo; super; end # REDEFINE
> > > > >end
> > > > >
> > > > >At least that is a conservative extension.
> > > > Or maybe providing two supers, one for the current behavior, the other
> > > > for the new. I don't whatever name is suitable for new super yet,
> > > > however.
> > > How would you be sure (and why would you want to?) know when a
> > > "previous" exists or not? It rarely make sense to avoid advice.
> > > However, when absolutely needed one can fallback to directed calling
> > > with things like:
> > > super_at(Object)
> > Inheritance dependecies, oooouch, danger, hot do not touch!
> Well, that was kind of my point. As often as this is useful, so is
> skipping over around advice.
Maybe I read you wrong, there should be a way for metaprogrammers to
know where a method was defined, but that should not be the *only* way
to access to super or redefined methods.
Actually
super_at(object/module/class)
might be a useful tool, but I would like to have
super
and
old (or next or whateverMatzLikes 
to just step up one level for "non meta use"
Yes, that's a common consideration, but there's a subtle reason why
you don't really want that, which is what I'm trying to get across.
When someone writes an around advice, they expect it be wrap the the
method being advised. If the programmer of the original method used
#super rather than #old, it wouldn't work. And that's bad. Because the
point is, I should be able to advise any method I want.
Of course, there may arise special cases where skipping advice in
needed, but that is a rare/dangerous meta-coding need, in which case
#super_at should be more than enough to satisfy the requirement, eg.
super_at(self.class) for instance.
> much more importantly, any such implementation is going to be severely
> hampered in execution efficiency compared to a native capability.
Losing you here, do you mean that special bytecode would be emitted
for these three constructs that would be more efficent than for method
redefinition?
No no. I simply mean that any lib built-on top of Ruby's current meta-
programming constructs is going to be much slower (and less robust)
than something built-in to Ruby itself, basically because method
composition operates at such a low-level.
T.
···
On Sep 7, 1:30 am, "Robert Dober" <robert.do...@gmail.com> wrote:
On 9/6/07, Trans <transf...@gmail.com> wrote:
> On Sep 6, 11:54 am, "Robert Dober" <robert.do...@gmail.com> wrote:
> > On 9/6/07, Trans <transf...@gmail.com> wrote:
> > > On Sep 5, 6:46 pm, Yukihiro Matsumoto <m...@ruby-lang.org> wrote:
> > > > In message "Re: before, after and around Ruby 1.9" > > > > > on Thu, 6 Sep 2007 10:32:03 +0900, Joel VanderWerf <vj...@path.berkeley.edu> writes: