2011-10-31 10 views
48

आज मैं रूबी स्थिरांक के साथ एक मुश्किल मुद्दे पर ठोकर खा गया हूं। हमारी टीम में किसी ने एक मॉड्यूल बनाया, जिसे कई मॉडलों में शामिल किया गया है।कष्टप्रद "चेतावनी: पहले से ही प्रारंभिक निरंतर" संदेश

/home/ayrton/project/lib/life_cycle.rb:5: चेतावनी: हमारे (कल्पना) परीक्षण उत्पादन में इस तरह के रूप में चेतावनी संदेश में यह परिणाम पहले से ही लगातार रीसेट

एक प्रारंभ

module LifeCycle 

    unless (const_defined?(:RESET)) 
    RESET = 'reset' 
    end 

    #... 
end 

मैं भी एक ब्लॉग पोस्ट, Avdi ग्रिम, जो एक विकल्प प्रदान करता है solution द्वारा लिखित पढ़ा है, मैं सोच रहा था क्या आपकी राय कर रहे हैं, के बारे में: हल करने के लिए इस तरह से है, इस तरह से अपनी स्थिरांक घोषित करने के लिए है यह एम atter।

+0

क्या आप मतलब हल होगा यह 'require'd है कई मॉडलों में, या 'शामिल' डी? इसे केवल एक बार लोड किया जाना चाहिए, भले ही 'कई बार' की आवश्यकता हो, –

उत्तर

17

यह उन अनुप्रयोगों में केवल एक समस्या है जो स्पष्ट रूप से रेल अनुप्रयोगों की तरह पुनः लोड हो जाती हैं।

शब्दाडंबर आप नाराज हैं, तो आप एक ऐसे वक्तव्य आपरिवर्तक के रूप में unless उपयोग कर सकते हैं:

module LifeCycle 
    RESET = 'reset' unless const_defined?(:RESET) 
end 

यह केवल उपयोग तरीकों की Avdi के सुझाव के खिलाफ कुछ कमजोर तर्क छोड़ देता है:

  • निरंतर देखने है विधि लुकअप से तेज़,
  • निरंतर मान लोड पर परिभाषित किए गए हैं, पहले (अनुरोध) पर नहीं,
  • स्थिरांक visuall y सुझाव देता है कि उन्हें प्राप्त करने के लिए कोई काम करने की आवश्यकता नहीं है, और

यदि आपको इन्हें अनदेखा करने के लिए पर्याप्त अवदी के सुझाव पसंद हैं, तो इसके साथ जाएं।

+0

यह वास्तव में एक रेल अनुप्रयोग है, मुझे डर था कि 'जब तक const_defined?' एक समाधान है जो समस्या को मुखौटा करता है और वास्तव में इसे हल नहीं करता है। – Ayrton

+1

यदि समस्या स्रोत रीलोडिंग है, तो यह मुखौटा है। अन्यथा, यह हल करता है।:-) – sheldonh

81

मुझे आज भी यही समस्या आई और एक सरल समाधान मिला।

के बाद से चेतावनी इसकी एक ही मूल्य के साथ एक निरंतर पुन: असाइन करने की कोशिश कर रहा से है, मैं सिर्फ

module LifeCycle 
    RESET = 'reset' 
end 

module LifeCycle 
    RESET ||= 'reset' 
end 

यह चेतावनी का ध्यान रखा करने के लिए बदल गया है और जाँच की तुलना में बहुत आसान है अगर प्रत्येक निरंतर परिभाषित किया गया है। अगर आपको बेहतर समाधान मिल जाए तो मुझे बताएं।

+2

यह चेतावनी का बहुत सावधानी से ख्याल रखता है। –

+2

अगर आपके वर्ग को पुनः लोड किया जा रहा है तो चेतावनी आपके लिए एक अच्छा समाधान है। यदि आप तृतीय पक्ष वर्गों से स्थिरांक ओवरराइड कर रहे हैं तो चेतावनी को जगह में छोड़ना सुरक्षित है। –

+0

यह रूबी के लिए काम करता है लेकिन रूबोकॉप ऐसा करते समय एक त्रुटि फेंक रहा है: 'एक त्रुटि हुई जब स्टाइल/म्यूटेबल कॉन्स्टेंट पुलिस ' – anthony

6

यदि आपके कोड में यह बदलता रहता है तो RESET स्थिर नहीं है। यदि आप इसे कम केस 'रीसेट' के नाम पर बदलते हैं, तो समस्या गायब हो जाती है। रूबी सोचता है कि ऊपरी केस चर स्थिरांक हैं और इस प्रकार आपको चेतावनी देने के लिए एक त्रुटि प्रदर्शित होती है कि निरंतर बदल गया है।

0

मैं रूबी में यह त्रुटि आई जब Intellij आईडीई .. कि चर नाम की वजह से था अपरकेस के साथ शुरू घोषित .. बनाने कि छोटे अक्षरों पर इस मुद्दे ..

संबंधित मुद्दे