2011-06-20 33 views
3

我可以訪問常量AGE A :: AGE。如何訪問不斷NAMERuby:如何訪問匿名類中定義的常量?

class A 
    AGE=24 
    class << self 
    NAME="foo" 
    end 
end 

注意事項?(如A::NAME拋出一個錯誤。):我試圖訪問類A.

注2外的常數:我關於Ruby 1.8.7

+0

你想在哪裏訪問它? – Eimantas

+0

我已更新我的問題 –

回答

9

在Ruby 1.9.x中,Ruby提供了方法singleton_class。因此,致電

irb(main):009:0> A.singleton_class::NAME 
=> "foo" 

做你想做的事情。


在Ruby 1.8.x的,你可以在你自己的實現方法singleton_class

class Object 
    def singleton_class 
    class << self; self; end 
    end 
end 

然後您就可以撥打電話:

A.singleton_class::NAME 
=> "foo" 

這是可能的,因爲事實上,Ruby類始終可用於擴展和更改。

+1

你應該添加「Ruby 1.9」。 –

+1

+1。我在Ruby 1.8.7上 –

+0

我已經補充說好的解決方案只適用於Ruby 1.9.x,並向Ruby 1.8.x添加了一個解決方法(這可能會幫助你,也可能不會幫助你)。 – mliebelt

0

定義常量:

self::NAME = "foo" 

這將明確地將其綁定到self

+0

我正在嘗試訪問第三方gem中定義的常量。所以我沒有控制它。 –