web-dev-qa-db-fra.com

Accéder aux constantes d'une classe

Quand j'ai ce qui suit:

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

  ...
end

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

130
Jeremy Smith

Ce que vous avez posté devrait fonctionner parfaitement:

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

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

Si vous écrivez du code supplémentaire dans votre classe contenant la constante, vous pouvez le traiter comme un global.

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 points.

Foo::MY_CONSTANT  #=> hello
40
maček

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"
38
aidan

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

Oui il y a:

Foo::CONSTANT_NAME
17
Jörg W Mittag