जांचें कि क्या कोई स्थिरांक पहले से ही परिभाषित है


82

यह एक सरल है, मुझे उम्मीद है। मैं निम्न उदाहरण में कैसे जांच करूं, अगर एक स्थिरांक पहले से ही परिभाषित है?

#this works
var = var||1
puts var
var = var||2
puts var

#this doesn't
CONST = CONST||1
puts CONST
CONST = CONST||2
puts CONST

=> 1
   1
   uninitialized constant CONST (NameError)

जवाबों:


133
CONST = 2 unless defined? CONST

भयानक ऑपरेटर के बारे में अधिक जानकारी के लिए यहां देखें defined?

पुनश्च और भविष्य में मुझे लगता है कि आप var ||= 1इसके बजाय चाहते हैं var = var||1


6
वहाँ भी है, const_defined?लेकिन यह मेरे लिए काम नहीं करता है; यकीन नहीं है कि क्यों।
जैरेड बेक

8
const_defined?Moduleकक्षा का एक तरीका है और यह आपको बताएगा कि क्या उस मॉड्यूल और उसके पूर्वजों में वैकल्पिक परिभाषित किया गया है (वैकल्पिक रूप से)। कुछ उदाहरणों के लिए डॉक्स जांचें - ruby-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F
jibiel

और इस बारे में क्या? रूबी-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F
Donato

इस उत्तर के लिए धन्यवाद .. उपयोग करने में सक्षम नहीं होने के लिए महान समाधान || = मज़बूती से एक बूलियन के साथ
चक वैन डेर लिंडेन

यह सिर्फ कांस्टेंट ही नहीं बल्कि तरीकों के लिए भी बहुत अच्छा है।
जोशुआ पिंटर

25

const_defined? एपीआई

pry> User.const_defined?("PER_PAGE")
=> true
pry> User.const_defined?("PER_PAGE123")
=> false

1
यह विशेष रूप से तब मददगार होता है जब आप जाँच कर रहे हों कि क्या यह गतिशील तरीके से परिभाषित किया गया है।
डिकिएबॉय

4
CONST ||= :default_value

ऊपर माणिक 1.9.3 पर मेरे लिए काम करता है, लेकिन 1.8 पर विफल रहता है ... अच्छी तरह से 1.8 अब प्राचीन है।


:) 1.8 प्राचीन हो सकता है, लेकिन अभी भी 2017 में उपयोग में है, उदाहरण: ड्रीमहोस्ट साझा होस्टिंग।
16

मैं देख रहा हूं कि अधिकांश परियोजनाओं ने पहले ही रूबी 1.8 के लिए समर्थन छोड़ दिया है। मुझे पता है कि रेड हट एंटरप्राइज लिनक्स द्वारा अभी भी "समर्थित" रूबी 1.8 संस्करण हैं, उदाहरण के लिए। उन्हें सुरक्षा पैच मिल रहे हैं, लेकिन जो कुछ भी एप्लिकेशन इंस्टॉल किया गया है, उसमें पुराने रत्न संस्करणों में कई अज्ञात सुरक्षा खामियों को उजागर करता है। तो हाँ, वहाँ है, लेकिन ज्यादातर लोगों के लिए अप्रासंगिक है। जैसे वहाँ हैं और एक लंबे समय के लिए XP चलाने वाले कंप्यूटर होंगे (अभी हाल ही में फिर से ऐसे एटीएम को देखा गया है)।
akostadinov
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.