J'ai essayé d'obtenir Matz-n-Flanagan RPL du livre de la métaprogrammation chapitre dans ma tête. Cependant, je ne pouvais pas comprendre la sortie de l'extrait de code suivant que j'ai rêvé.
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"]
Le livre affirme que la méthode de la classe 'constantes' retourne la liste des constantes de la classe (comme vous pouvez le voir dans la sortie de A. constantes)
J'ai essayé d'obtenir la liste des constantes définies pour le Module de classe quand je suis tombé sur le dessus de comportement étrange.
Une des constantes apparaissent dans le Module.les constantes. - comment puis-je obtenir la liste des constantes définies par le Module de classe?
Les docs de l'état que " le Module.les constantes retourne toutes les constantes définies dans le système. incl. les noms de toutes les classes et méthodes"
Depuis Un hérite de sa mise en œuvre dans le Module.constantes, comment ça se comportent différemment dans la base et les types dérivés?
p A.class # => Class
p A.class.ancestors # => [Class, Module, Object, Kernel]
Remarque: Si vous utilisez Ruby 1.9, les constantes serait de retourner un tableau de symboles à la place de chaînes de caractères.