KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I was trying to get Matz and Flanagan's "Ruby Programming Language" metaprogramming chapter into my head, However I couldn't understand the output from the following code snippet that I dreamed up: p Module.constants.length # => 88 $snapshot1 = Module.constants class A NAME=:abc $snapshot2 = Module.constants p $snapshot2.length # => 90 p $snapshot2 - $snapshot1 # => ["A", "NAME"] end p Module.constants.length # => 89 p Module.constants - $snapshot1 # => ["A"] p A.constants # => ["NAME"] The book states that the class method constants returns the list of constants for the class (as you can see in the output for A.constants ). I was trying to get the list of constants defined for the Module class when I came across the above strange behavior. A 's constants show up in Module.constants. How do I get the list of constants defined by the Module class? The docs state Module.constants returns all constants defined in the system. including names of all classes and methods Since A inherits its implementation from Module.constants , how does it behave differently in the base and derived types? p A.class # => Class p A.class.ancestors # => [Class, Module, Object, Kernel] Note: If you're using Ruby 1.9, constants would return an array of symbols instead of strings.
Tags (comma-separated)
Save Edits
Cancel