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
--
share your knowledge. it's a way to achieve immortality.
- h.h. the 14th dali lama
Ara.T.Howard wrote:
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"
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.
···
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
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
···
On Mon, 13 Mar 2006, Joel VanderWerf wrote:
Ara.T.Howard wrote:
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"
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.
--
share your knowledge. it's a way to achieve immortality.
- h.h. the 14th dali lama
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.
···
ara.t.howard@noaa.gov wrote:
On Mon, 13 Mar 2006, Joel VanderWerf wrote:
Ara.T.Howard wrote:
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"
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.
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 
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
i like that. what do you think about
class Foo
delegate :src, :dst
end
??
-a
···
On Tue, 14 Mar 2006, Joel VanderWerf wrote:
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.
--
share your knowledge. it's a way to achieve immortality.
- h.h. the 14th dali lama