रूबी koans about_hashes.rb
से:fetch बनाम [] हैश के साथ काम करते समय?
आप जब हैश कुंजी तक पहुँचने #[]
के बजाय #fetch
उपयोग करने के लिए क्यों चाहते हो सकता है?
रूबी koans about_hashes.rb
से:fetch बनाम [] हैश के साथ काम करते समय?
आप जब हैश कुंजी तक पहुँचने #[]
के बजाय #fetch
उपयोग करने के लिए क्यों चाहते हो सकता है?
डिफ़ॉल्ट रूप से, #[]
का उपयोग कर यदि वह मौजूद हैश मान प्राप्त होगा, और नहीं के बराबर है, तो यह मौजूद नहीं है * लौट आते हैं।
fetch(key_name)
: यदि कुंजी मौजूद है, मूल्य प्राप्त करता है, तो यहfetch(key_name, default_value)
नहीं है एक KeyError
बढ़ा: प्राप्त का उपयोग #fetch
आपके पास कुछ विकल्प (#fetch पर डॉक्स देखें) देता है यदि कुंजी मौजूद है, तो मान default_value
अन्यथा
fetch(key_name) { |key| "default" }
: कुंजी मौजूद होने पर मान प्राप्त करें, अन्यथा आपूर्ति किए गए ब्लॉक को चलाएं और मान वापस करें।प्रत्येक व्यक्ति को स्थिति की आवश्यकता के रूप में उपयोग किया जाना चाहिए, लेकिन #fetch
बहुत ही समृद्ध है और इसका उपयोग इस बात के आधार पर कई मामलों को संभाल सकता है। इसी कारण से मैं इसे #[]
के साथ कुंजी तक पहुंचने के लिए पसंद करता हूं।
* यदि वह मौजूद है के रूप में मार्क-आंद्रे Lafortune कहा, #[]
के साथ एक चाबी तक पहुँचने #default_proc
फोन करेगा, वरना #default
, लौट nil
को जो चूक। अधिक जानकारी के लिए the doc entry for ::new
देखें।
fetch
डिफ़ॉल्ट रूप से कुंजी प्राप्त नहीं होने पर त्रुटि उत्पन्न होती है। आप इसके बजाय एक डिफ़ॉल्ट मान की आपूर्ति कर सकते हैं।
h = {}
h.fetch(:foo) # no default value, raises error
# => # ~> -:3:in `fetch': key not found: :foo (KeyError)
h.fetch(:bar, 10) # default value, returns default value
# => 10
'एच [: foo]' 'h.fetch (: foo, nil) 'जैसा ही है। –
@ एलबीजी: यह वही व्यवहार करता है, हाँ –
@ एलबीजी: नहीं, यह नहीं है। यह 'शुरू एच। फ़ेच (: foo) जैसा ही है; बचाव कुंजीरर; यदि h.default_proc तो h.default_proc।() else h.default end end'। –
[]
के साथ, हैश नियंत्रण का निर्माता होता है जब कोई कुंजी मौजूद नहीं होती है, fetch
के साथ होता है।
धन्यवाद! संक्षेप में और स्पष्ट, कुछ संदर्भ के साथ। – allanberry
अच्छा जवाब, सिवाय इसके कि यह तकनीकी रूप से सही नहीं है। '# [] 'जब कुंजी मौजूद नहीं है तो' # default_proc' को कॉल करेगा अगर कोई और अन्य '# डिफ़ॉल्ट' लौटाएगा। डिफ़ॉल्ट रूप से, '# डिफ़ॉल्ट' रिटर्न 'शून्य '। –
@ मार्क-एंड्रेलाफोर्ट्यून धन्यवाद, मैंने कुछ नया सीखा! अद्यतन उत्तर –