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


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.