156 votes

Accès aux constantes d'une classe

Lorsque j'ai les éléments suivants :

class Foo
   CONSTANT_NAME = ["a", "b", "c"]

  ...
end

Existe-t-il un moyen d'accéder avec Foo::CONSTANT_NAME ou dois-je créer une méthode de classe pour accéder à la valeur ?

263voto

Dylan Markow Points 65796

Ce que vous avez posté devrait fonctionner parfaitement :

class Foo
  CONSTANT_NAME = ["a", "b", "c"]
end

Foo::CONSTANT_NAME
# => ["a", "b", "c"]

2 votes

Hmm, j'ai dû faire une erreur de frappe lorsque j'ai testé tout à l'heure. Oups :)

12 votes

Pour qu'il s'agisse vraiment d'une constante, n'oubliez pas d'ajouter un .freeze à la fin de la valeur ! CONSTANT_NAME = ["a", "b", "c"].freeze

7 votes

Toujours mélanger :: y . ;)

47voto

aidan Points 2496

Quelques alternatives :

class Foo
  MY_CONSTANT = "hello"
end

Foo::MY_CONSTANT
# => "hello"

Foo.const_get :MY_CONSTANT
# => "hello"

x = Foo.new
x.class::MY_CONSTANT
# => "hello"

x.class.const_defined? :MY_CONSTANT
# => true

x.class.const_get :MY_CONSTANT
# => "hello"

46voto

maček Points 25640

Si vous écrivez du code supplémentaire dans votre classe qui contient la constante, vous pouvez la traiter comme une constante globale.

class Foo
  MY_CONSTANT = "hello"

  def bar
    MY_CONSTANT
  end
end

Foo.new.bar #=> hello

Si vous accédez à la constante en dehors de la classe, préfixez-la avec le nom de la classe, suivi de deux deux-points

Foo::MY_CONSTANT  #=> hello

18voto

Jörg W Mittag Points 153275

Existe-t-il un moyen d'accéder à Foo::CONSTANT_NAME ?

Oui, il y en a une :

Foo::CONSTANT_NAME

0 votes

Lorsque j'essaie d'y accéder, j'obtiens l'avertissement suivant. warning : already initialized constant TestData::CONSTANT_VAR Cette variable n'est initialisée nulle part ailleurs. Pourquoi cet avertissement ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X