2011-06-21 10 views

Odpowiedz

172

Co pisał powinno działać idealnie:

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

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

Hmm, muszę być literówka gdy testowałem wcześniej. Ooops :) –

+0

niiiceee man! Znowu ratujesz: D –

+6

, żeby to naprawdę było stałe, nie zapomnij dodać kropki na koniec wartości! 'CONSTANT_NAME = [" a "," b "," c "]. Freeze' – mutexkid

36

Jeśli piszesz dodatkowego kodu w swojej klasie, który zawiera stały, można traktować go jak globalny.

class Foo 
    MY_CONSTANT = "hello" 

    def bar 
    MY_CONSTANT 
    end 
end 

Foo.new.bar #=> hello 

Jeśli masz dostęp do stałej poza klasą, poprzedzić go z nazwą klasy, a następnie dwoma dwukropkami

Foo::MY_CONSTANT #=> hello 
13

Czy istnieje sposób, aby uzyskać dostęp Foo::CONSTANT_NAME?

Tak, jest:

Foo::CONSTANT_NAME 
+0

Kiedy próbuję uzyskać do niego dostęp, mam poniżej ostrzeżenia. Ostrzeżenie: już zainicjowana stała TestData :: CONSTANT_VAR Ta zmienna nie została zainicjalizowana nigdzie indziej. Dlaczego mam to ostrzeżenie? –

27

Niektóre alternatywy:

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" 
Powiązane problemy