On Sun, 28 Nov 2004 01:22:53 +0900 "Giulio Piancastelli" <giulio.piancastelli / gmail.com> wrote: > I'm wondering... does Object#send start from the Object class to search > for the method to execute? I'm leading to this conclusion because of a > little class I'm working on where I'm using send to execute methods, > and one of the methods I'm trying to execute is called 'select' and > takes a number as its parameter. Unfortunately, this name happens to > clash with Kernel.select, which instead takes an array as a parameter. > Thus, an exception is thrown, leading to the "wrong argument type > Fixnum (expected Array)" message. > > I suppose it's impossible to make Object#send search from where the > method has been called instead of Object itself... but, is there a way > to have the B#select method called instead of the select method in > Kernel? I'd like not to change names nor the design of A and B, if > that's possible. > > On the other hand, the following sketch just works: > > class A > def make_it_so arg0 > send(arg0.text, 1) > end > end > > class B < A > def select index > puts index > end > end > > b = B.new > b.make_it_so(param) # where param.text returns 'select' > > so, it's probably that I don't understand what's really happening... > Can anyone help enlight me on the topic? > Best Regards, > Giulio Piancastelli. > > It seems to work here
bschroed@black $ cat send.rb class A def send_it method_name send(method_name, "Send from #{self}") end end class B < A def select(msg) puts "Received: #{msg}" end end b = B.new b.send_it(:select) bschroed@black $ ruby send.rb Received: Send from #<B:0x402a9b9c> bschroed@black $ ruby -v ruby 1.8.2 (2004-11-23) [i386-linux]
regards, Brian -- Brian Schröäer http://ruby.brian-schroeder.de/