Depuis Ruby 2.0, il est possible de créer une constante privée en utilisant private_constant
, ce qui entraîne une erreur si la constante est utilisée directement en dehors du module de déclaration.Itérer uniquement les constantes Ruby publiques
Toutefois, constants
et const_defined?
renvoient toujours des constantes privées et const_get
permet d'y accéder. Existe-t-il un moyen d'identifier par programme les constantes privées et de les filtrer lors de l'exécution?
(Note: What does Module.private_constant do? Is there a way to list only private constants? et sa réponse ne traitent pas de ce cas, mais plutôt l'inverse (comment lister seulement privées constantes).)
Mise à jour: Il semble que dans Ruby 1.9 et 2.0, constants
n'incluait que des constantes publiques. A partir de 2.1, le sans-argument constants
inclut toujours uniquement des constantes publiques, mais définir inherit
à false
avec constants(false)
(c'est-à-dire, liste uniquement les constantes définies dans ce module, pas dans ses modules ancêtres) a pour effet secondaire d'exposer les constantes privées.
double possible de http://stackoverflow.com/questions/12944616/what-does-module-private-constant-do-is-there-a -way-to-list-only-private-consta –
Ils sont toujours définis. Veux-tu que Ruby mente? – tadman
Je ne suis pas en train de répliquer votre problème dans Ruby 2.1.4: '2.1.4: 001> module Foo; X = 1; Y = 2; private_constant: Y; fin; Foo.constants' renvoie '[: X]' –