From: Demonic Software Date: 2008-03-14T12:39:52+09:00 Subject: Re: Naming ruby class attribute and methods ------=_Part_10204_23984650.1205466001084 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline 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! > > ------=_Part_10204_23984650.1205466001084--