2011-06-21 162 views

回答

172

你貼什麼應該很好地工作:

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

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

嗯,當我在前面測試一定是我輸錯。 Ooops :) –

+0

niiiceee男子!你再次拯救我:D –

+6

爲了真正成爲一個常量,不要忘記在值的末尾添加一個.freeze! 「CONSTANT_NAME = [」a「,」b「,」c「]。freeze' – mutexkid

36

如果你正在寫一個包含常數的類中的其他代碼,你可以把它當作一個全球性的。

class Foo 
    MY_CONSTANT = "hello" 

    def bar 
    MY_CONSTANT 
    end 
end 

Foo.new.bar #=> hello 

如果你訪問類的不變之外,與類名前綴了,就跟着兩個冒號

Foo::MY_CONSTANT #=> hello 
13

是否有訪問Foo::CONSTANT_NAME的方法嗎?

是的,有:

Foo::CONSTANT_NAME 
+0

當我試圖訪問它時,我有下面的警告。警告:已經初始化了常量TestData :: CONSTANT_VAR這個變量沒有在其他地方初始化。爲什麼我有這個警告? –

27

一些替代方案:

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"