Alias_method 'stickiness'

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 :wink:

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 :wink:

--
      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