From: Todd Benson Date: 2008-03-14T13:23:41+09:00 Subject: Re: Naming ruby class attribute and methods On Thu, Mar 13, 2008 at 10:39 PM, Demonic Software wrote: > Thanks David. > Is there any way to get the methods on an object that is already > instantiated? > > Thanks again > > > > On Thu, Mar 13, 2008 at 10:27 PM, David A. Black wrote: > > > Hi -- > > > > On Fri, 14 Mar 2008, Demonic Software wrote: > > > > > Hello, > > > > > > Is there a way to name all the methods and attributes/ class > > instantiated > > > variables that have been created? For example, from the class below, I > > > would like to get all the variables instantiated from the initialize and > > > example methods, and then I would also like to be able to get the method > > > names. > > > > > > > > > #pseudo code, not sure if it really runs > > > class Foo > > > def initialize() > > > @thestring = '' > > > @haha = "HA HA HAA!" > > > @var = "I am a variable" > > > end > > > def example(arg) > > > @arg = arg > > > @thestring = "#{@haha} #{@var}: #{arg}" > > > end > > > def thestring > > > @thestring > > > end > > > end > > > > > > > > > So is there a way to extract ["thestring", "var", "haha", "arg"] for the > > > variable names and then ["initialize", "example", "thestring"] for the > > > method names. I can see how I would do it with regular expressions and > > > ruby2ruby, but I was wondering if there was another way of extracting > > the > > > information. Thanks in advance. > > > > You can get method and instance variable names. An "attribute" is > > really a kind of virtual construct, composed of methods and (usually) > > instance variables, so it doesn't appear as a separate thing when you > > do introspective stuff on the object. The main time "attribute" exists > > is when you create them; after that, they're just methods (though one > > is of course free to continue to call them attributes). > > > > Foo.instance_methods(false) will give you all the instance methods > > defined in Foo. (The rather cryptic "false" means: don't include > > methods created higher in the ancestry.) To get the instance variables > > you have to instantiate the class, run the methods that create them, > > and then call the #instance_variables method. (Just defining methods > > with i. vars inside them doesn't create the i. vars.) > > > > > > David > > > > -- > > Upcoming Rails training from David A. Black and Ruby Power and Light: > > ADVANCING WITH RAILS, April 14-17 2008, New York City > > CORE RAILS, June 24-27 2008, London (Skills Matter) > > See http://www.rubypal.com for details. Berlin dates coming soon! > > > > > f = Foo.new f.public_methods(false) ... works for the instance f Todd