From: "David A. Black" Date: 2009-07-21T20:58:07+09:00 Subject: Re: Inheritance problem with dynamic methods Hi -- On Tue, 21 Jul 2009, Stefano Grioni wrote: > Hello, > > I'm tying to create a method which would allow me to get and set > instance variables having the same name as the class. And this should be > true even for classes inheriting it. > > For instance > > [code] > class Mother > define_method(self.to_s.downcase){ instance_variable_get > '@'< define_method((self.to_s.downcase+'=').to_sym){|nom| > instance_variable_set '@'< end > class Daughter < Mother > end > [/code] > > At the moment, this code creates "mother" and "mother=" instance methods > for both Mother and Daughter's classes. > Instead, what I'd like to have in a "mother" and "mother=" instance > methods for Mother, and "daughter" and "daughter=" for Daughter. > > I think that there is some meta programming trick that I'm missing but I > can't find which one. One metaprogramming trick you could use is attr_accessor :-) Another is the "inherited" hook. Try this: class Mother def self.attr_eponymous(c=self) c.send(:attr_accessor, c.to_s.downcase) end def self.inherited(c) attr_eponymous(c) end attr_eponymous end 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)