any idea if this behaviour is intended or not?
mussel:~/eg/ruby/nrtlib/nrtlib-0.0.0 > cat a.rb
the problem
module NRT
class Subscription
def process_incoming
raise NotImplementedError
end
alias_method "run", "process_incoming"
end
class OLSSubscription < Subscription
def process_incoming
p 42
end
end
end
begin; NRT::OLSSubscription::new.run ;rescue Exception => e; p e;
end
an easy solution
module NRT
class Subscription
def self::anonym dst, src
module_eval %Q[ def #{ dst }(*a, &b) #{ src }(*a, &b) end ]
end
anonym "run", "process_incoming"
end
end
NRT::OLSSubscription::new.run
mussel:~/eg/ruby/nrtlib/nrtlib-0.0.0 > ruby a.rb
#<NotImplementedError: NotImplementedError>
42
this seems odd to me.
-a
Ara.T.Howard wrote:
def process_incoming
raise NotImplementedError
end
alias_method "run", "process_incoming"
Unfortunately (?) what this^^^ does is define run to be a copy of the
method process_incoming, rather than define run as a method that
delegates to process_incoming.
I suppose this behavior is necessary if you want to use alias_method to
wrap an old method, regardless of what gets redefined in child classes.
On Mon, 13 Mar 2006, Joel VanderWerf wrote:
class Subscription
wrap an old method, regardless of what gets redefined in child classes.
doh! yup - yer right. i like my ‘anonym’ method more and more.
perhaps an
option to alias_method like
alias_method “foo”, “bar”, :dup => false
or, more concise
alias_method “foo”, “bar”, false
though i detest dangling bool arguments (method(true, false, true, true,
false) acckkkk!)…
either that or alias_method should be renamed copy_method
thoughts?
-a
[email protected] wrote:
alias_method “foo”, “bar”, false
though i detest dangling bool arguments (method(true, false, true, true,
false) acckkkk!)…
either that or alias_method should be renamed copy_method
I’ve just gotten used to using alias only for metaprogramming, and not
for ordinary API definition.
Maybe it would be nice if the alias keyword were reserved for the
delegation style definition, like your anonym method, and the
metaprogramming interface were something like this:
class Foo
alias :m_copy :m # old way
instance_method_at[:m_copy] = instance_method(:m) # new way
now you can wrap :m_copy however you want
end
This makes it more clear that you are making a copy, so it might be less
confusing.
On Tue, 14 Mar 2006, Joel VanderWerf wrote:
now you can wrap :m_copy however you want
end
This makes it more clear that you are making a copy, so it might be less
confusing.
i like that. what do you think about
class Foo
delegate :src, :dst
end
??
-a