Доступ к константам класса Когда у меня есть следующее: 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
Ответ 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"