Metaprogramming and introspection are fairly tightly integrated. When you're writing metaprogramming code, you will usually need to call methods or get the value of variables whose names are only determined when the code is run. Ruby contains a rich set of methods to allow access to the internal state of its objects. Most of this functionality is in the classes Class, Module, and Object.
The following tables provide a quick guide to the most commonly used methods. The eval family of methods is not included in this section, and some methods will be explained in more detail later in this chapter. The Module class, in particular, has some less commonly used introspection methods involving access control levels that are not listed here.
The first table describes the introspective methods of the Class class.
|inherited(subclass)||Automatically called when a subclass of the class is defined.|
|Superclass||Returns the superclass of the class. If the class is Object, this returns nil.|
The following table describes the introspective methods of the Module class.
|self.constants||Returns an array of all constants currently defined. This contains not just system-level constants, but also the classes and modules available. The names are returned as strings.|
|self.nesting||Returns an array of all the nested modules currently in scope, innermost to outermost.|
|alias_method(new_name, old_name)||Defines new_name as a copy of the definition of old_name|