एक वर्ग की स्थिरांक तक पहुँचना


142

जब मेरे पास निम्नलिखित हो:

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

  ...
end

क्या उपयोग करने का कोई तरीका है Foo::CONSTANT_NAMEया क्या मुझे मूल्य तक पहुंचने के लिए एक वर्ग विधि बनाना है?

जवाबों:


244

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

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

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

2
हम्म, जब मैंने पहले परीक्षण किया था, तो मुझे गलत समझना चाहिए। ऊप्स :)
जेरेमी स्मिथ

12
इसके लिए सही मायने में एक स्थिर होना चाहिए, मूल्य के अंत में एक .freeze जोड़ना न भूलें! CONSTANT_NAME = ["a", "b", "c"].freeze
म्यूटेक्सकिड

6
हमेशा मिलाएं ::और .;)
निक

अपरकेस होने पर चीजें मुश्किल होती हैं;)
माइकल यिन

42

यदि आप अपनी कक्षा के भीतर अतिरिक्त कोड लिख रहे हैं जिसमें निरंतरता है, तो आप इसे एक वैश्विक की तरह मान सकते हैं।

class Foo
  MY_CONSTANT = "hello"

  def bar
    MY_CONSTANT
  end
end

Foo.new.bar #=> hello

यदि आप कक्षा के बाहर निरंतर पहुँच रहे हैं, तो इसे कक्षा नाम के साथ उपसर्ग करें, इसके बाद दो कॉलन

Foo::MY_CONSTANT  #=> hello

42

कुछ विकल्प:

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"

17

क्या वहां पहुंचने का कोई रास्ता है Foo::CONSTANT_NAME?

हाँ वहाँ है:

Foo::CONSTANT_NAME

जब मैं इसे एक्सेस करने की कोशिश कर रहा हूं, तो मैं नीचे चेतावनी दे रहा हूं। चेतावनी: पहले से ही निरंतर TestData :: CONSTANT_VAR इस चर को कहीं और प्रारंभ नहीं किया गया है। मैं यह चेतावनी क्यों दे रहा हूं?
एएसएम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.