From: Juston Davies Date: 2009-07-22T07:02:37+09:00 Subject: Re: define_method in inheritance Awesome, thats what I wanted to hear. Thanks for the help! On Jul 21, 3:20 pm, "David A. Black" wrote: > Hi -- > > > > On Wed, 22 Jul 2009, Juston Davies wrote: > > I had a quick question about something I had read in a book "The Ruby > > Way." The author talks about different ways to dynamically define > > methods during runtime using something similar to the snippet below. > > >  def define_method (name, &array) > >    self.class.send(:define_method, name,&array) > >  end > > > This opens up the scope of a given class so any other class could add > > methods on the fly. My question is that if I were to insert this code > > into a parent and then invoke it on a child would the new method be > > defined within the scope of the child or the parent? I'm concerned > > that this might result in adding methods into all the children rather > > than just the desired one. Let me know what you think. Thanks in > > advance! > > It will define the method in self.class, which will be the class of > whatever object you call it on. The new method will also be available > to instances of subclasses of that class. > > class A >    def define_method(name, &block) >      self.class.send(:define_method, name, &block) >    end > end > > class B < A > end > > class C < B > end > > b = B.new > b.define_method(:x) { puts "In x!" } > > b.x       # In x! > > c = C.new > c.x       # In x! > > a = A.new > a.x       # Unknown method x > > David > > -- > David A. Black / Ruby Power and Light, LLC > Ruby/Rails consulting & training:http://www.rubypal.com > Now available: The Well-Grounded Rubyist (http://manning.com/black2) > Training! Intro to Ruby, with Black & Kastner, September 14-17 > (More info:http://rubyurl.com/vmzN)