2013-05-15 6 views

उत्तर

110

डिफ़ॉल्ट रूप से, #[] का उपयोग कर यदि वह मौजूद हैश मान प्राप्त होगा, और नहीं के बराबर है, तो यह मौजूद नहीं है * लौट आते हैं।

  • 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 देखें।

+0

धन्यवाद! संक्षेप में और स्पष्ट, कुछ संदर्भ के साथ। – allanberry

+7

अच्छा जवाब, सिवाय इसके कि यह तकनीकी रूप से सही नहीं है। '# [] 'जब कुंजी मौजूद नहीं है तो' # default_proc' को कॉल करेगा अगर कोई और अन्य '# डिफ़ॉल्ट' लौटाएगा। डिफ़ॉल्ट रूप से, '# डिफ़ॉल्ट' रिटर्न 'शून्य '। –

+0

@ मार्क-एंड्रेलाफोर्ट्यून धन्यवाद, मैंने कुछ नया सीखा! अद्यतन उत्तर –

6

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 
+1

'एच [: foo]' 'h.fetch (: foo, nil) 'जैसा ही है। –

+1

@ एलबीजी: यह वही व्यवहार करता है, हाँ –

+6

@ एलबीजी: नहीं, यह नहीं है। यह 'शुरू एच। फ़ेच (: foo) जैसा ही है; बचाव कुंजीरर; यदि h.default_proc तो h.default_proc।() else h.default end end'। –

19

[] के साथ, हैश नियंत्रण का निर्माता होता है जब कोई कुंजी मौजूद नहीं होती है, fetch के साथ होता है।

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