Je tentais d'obtenir Matz et le chapitre metaprogramming « Ruby Programming Language » Flanagan dans ma tête, mais je ne pouvais pas comprendre la sortie de l'extrait de code suivant que j'Imaginée:Comment obtenir des constantes définies par la classe Module de Ruby par réflexion?
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"]
Les Etats livre que la méthode de classe constants
renvoie la liste des constantes pour la classe (comme vous pouvez le voir dans la sortie A.constants
). J'essayais d'obtenir la liste des constantes définies pour la classe Module quand je suis tombé sur le comportement étrange ci-dessus.
A
Les constantes s'affichent dans les constantes Module. Comment obtenir la liste des constantes définies par la classe Module?
Les docs état
Module.constants
renvoie toutes les constantes définies dans le système. y compris les noms de toutes les classes et méthodes
Depuis sa mise en œuvre A
hérite de Module.constants
, comment il 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, constants
retournerait un tableau de symboles au lieu de chaînes.
Ai-je répondu à votre question? Je demande parce que ma réponse n'a pas été «acceptée», mais n'a pas demandé d'informations supplémentaires ... –
@Marc - Votre réponse m'a amené à plus de questions et plus de gribouillage et d'effacement. J'ai passé cette semaine à essayer de comprendre le système de résolution de la méthode ... Je ne sais toujours pas quelles sont les possibilités - mais je pense que je suis sûr à 90% de son fonctionnement. Voir mon message ci-dessous. – Gishu