2015-08-08 5 views

उत्तर

18

नीचे सरल उदाहरण है कि आप साधारण के बीच अंतर दिखाई देगा है:

hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1)

आप गारंटी है कि कुंजी स्ट्रिंग के रूप दिया जाता है कर रहे हैं रूबी हैश & एक "सक्रिय समर्थन :: हैशविथ इंडिफ़िफरेंस"

  • HashWithIndifferentAccess

सरल रूबी हैश हमें कोई प्रतीक या स्ट्रिंग के रूप में हैश कुंजी का उपयोग करने की अनुमति देता है

$ irb 
    2.2.1 :001 > hash = {a: 1, b:2} 
    => {:a=>1, :b=>2} 
    2.2.1 :002 > hash[:a] 
    => 1 
    2.2.1 :003 > hash["a"] 
    => nil 

ActiveSupport :: HashWithIndifferentAccess

2.2.1 :006 > hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1, b:2) 
NameError: uninitialized constant ActiveSupport 
    from (irb):6 
    from /home/synerzip/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>' 
2.2.1 :007 > require 'active_support/core_ext/hash/indifferent_access' 
=> true 
2.2.1 :008 > hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1, b:2) 
=> {"a"=>1, "b"=>2} 
2.2.1 :009 > hash[:a] 
=> 1 
2.2.1 :010 > hash["a"] 
=> 1 
  • वर्ग हैशविथ इंडिफेंडरएप को रूबी "हैश" & से विशेष व्यवहार में जोड़ा गया है।
+1

सही उदाहरण –

3

रूबी हैश में:

hash[:key] 
hash["key"] 

अलग हैं। नाम के अनुसार HashWithIndifferentAccess में, आप key किसी भी तरह से पहुंच सकते हैं।

documentation यह करने के लिए आधिकारिक का हवाला देते हुए: foo और "foo" एक ही माना जाता है:

एक हैश जहां कुंजी लागू करता है।

और

आंतरिक प्रतीक जब पूरे लेखन इंटरफ़ेस में कुंजियों (बुला [] =, विलय, आदि) के रूप में इस्तेमाल तार करने के लिए मैप की जाती हैं। यह मैपिंग सार्वजनिक इंटरफ़ेस से संबंधित है। उदाहरण के लिए, दिए गए:

hash.keys # => ["a"]

+0

मैं HashWithIndifferentAccess के मामले में लगता है, प्रतीकों जब (,, आदि [] बुला = विलय) पूरे लेखन इंटरफ़ेस में कुंजी के रूप में इस्तेमाल किया तार करने के लिए मैप की जाती हैं। क्या यह सही है? –

+0

हां। संपूर्ण लेखन इंटरफ़ेस में कुंजियों के रूप में उपयोग किए जाने पर आंतरिक रूप से प्रतीकों को तारों पर मैप किया जाता है (कॉलिंग [] =, विलय, आदि)। यह मैपिंग सार्वजनिक इंटरफ़ेस से संबंधित है। – shivam

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