2011-06-21 12 views

उत्तर

172

क्या आप पोस्ट पूरी तरह से काम करना चाहिए:

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

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

हम्म, मैं गलत लिख दिया जाना चाहिए जब मैंने पहले परीक्षण किया गया। ओउप्स :) –

+0

niiiceee आदमी! आप मुझे फिर से सहेजते हैं: डी –

+6

इसके लिए वास्तव में स्थिर होने के लिए, मूल्य के अंत में एक .freeze जोड़ने के लिए मत भूलना! 'CONSTANT_NAME = [" a "," b "," c "]। फ्रीज' – 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

मिलाएं जब मैं इसे एक्सेस करने का प्रयास कर रहा हूं, तो मुझे चेतावनी दी जा रही है। चेतावनी: पहले से ही निरंतर टेस्टडाटा :: 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" 
संबंधित मुद्दे