2012-08-24 36 views
12

यह एक आम पैटर्न है: यदि कोई चर मौजूद नहीं है तो मुझे undefined local variable or method त्रुटि मिलती है।कैसे जांचें कि कोई वैरिएबल "अपरिभाषित स्थानीय चर या विधि" के बिना किसी मान के साथ मौजूद है या नहीं?

मौजूदा कोड में if variable_name.present? है लेकिन यह चर के लिए मौजूद नहीं है।

मैं चर के मूल्य की जांच कैसे कर सकता हूं और इसके लिए खाता भी मौजूद नहीं है?

मैं कोशिश की है:

if (defined? mmm) then 
    if mmm.present? then 
    puts "true" 
    end 
end 

लेकिन रूबी अभी भी है कि आंतरिक mmm.present? जाँच करता है और फेंकता है "ऐसी कोई चर" जब यह मौजूद नहीं है।

मुझे यकीन है कि इसके लिए एक आम पैटर्न/समाधान है।

उत्तर

21

बदलें present?!= '' रहे हैं:

if defined?(mmm) && (mmm != '') then puts "yes" end 
+0

इसके अलावा ऑपरेटरों वरीयताओं पर ध्यान देना और उचित रूप से कोष्ठक का उपयोग, इस मामले अभिव्यक्ति के दूसरे भाग कोष्ठक शामिल में, लेकिन आप एक _boolean_ जाँच कर रहे हैं और आप 'परिभाषित? (Mmm के लिए कोष्ठकों का उपयोग न) 'शर्त' सच 'वापस आ जाएगी। तो जब जटिल तुलना में यह '(परिभाषित? (मिमीएम)) ' – Asier

1

कोशिश:

if defined?(mm) && !mm.blank? 
    puts "acceptable variable" 
end 

यह सुनिश्चित करें कि आप अपरिभाषित चर या नहीं के बराबर या रिक्त मान नहीं मिलेगा कर सकते हैं।

आप केवल परिभाषित उपयोग कर सकते हैं? समय-समय पर समाप्त होने वाले सत्र-हैश का पता लगाने के लिए, विशेष रूप से गहरे स्तर के हैश के साथ।

if defined?(session[:user]['name']) 
    puts "active session" 
else 
    puts "expired session" 
end 
+0

रूबी में धाराप्रवाह नहीं है, लेकिन स्वीकार्य उत्तर के 3 साल बाद आप कुछ जानकारी प्रदान कर सकते हैं कि यह मौजूदा उत्तर से कैसे संबंधित है (रों)? यहां मैं सुझाव देता हूं कि 'एनआईएल' 'थोड़ा सा स्पष्टीकरण दे रहा है जो कि' अस्तित्व 'को छोड़कर जादू को गैर-अस्तित्व में ले जा सकता है। लेकिन आप निश्चित रूप से बेहतर जान लेंगे। धन्यवाद। – Dilettant

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

  • कोई संबंधित समस्या नहीं^_^