Доступ к константам класса

Когда у меня есть следующее:

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

  ...
end

Есть ли способ получить доступ с помощью Foo::CONSTANT_NAME или мне нужно создать метод класса для доступа к значению?

Ответ 1

То, что вы опубликовали, должно работать отлично:

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

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

Ответ 2

Если вы пишете дополнительный код внутри своего класса, который содержит константу, вы можете рассматривать его как глобальный.

class Foo
  MY_CONSTANT = "hello"

  def bar
    MY_CONSTANT
  end
end

Foo.new.bar #=> hello

Если вы обращаетесь к константе за пределами класса, прикрепите ее именем класса, а затем двумя двоеточиями

Foo::MY_CONSTANT  #=> hello

Ответ 3

Некоторые альтернативы:

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"

Ответ 4

Есть ли способ доступа к Foo::CONSTANT_NAME?

Да, есть:

Foo::CONSTANT_NAME