2012-02-08 9 views
6

मैं RubyKoans से about_hashes.rb के माध्यम से जा रहा हूं। 1 व्यायाम मुझे हैरान हो गया है:रूबी में डिफ़ॉल्ट हैश मान (Rubykoans.com -> about_hashes.rb)

def test_default_value 
    hash1 = Hash.new 
    hash1[:one] = 1 

    assert_equal 1, hash1[:one] #ok 
    assert_equal nil, hash1[:two] #ok 

    hash2 = Hash.new("dos") 
    hash2[:one] = 1 

    assert_equal 1, hash2[:one] #ok 
    assert_equal "dos", hash2[:two] #hm? 
    end 

मेरा अनुमान है कि Hash.new ("डॉस") "डॉस" सभी गैर-मौजूद कुंजियों के लिए डिफ़ॉल्ट जवाब बनाता है। क्या मैं सही हू?

उत्तर

9

हाँ, तुम ठीक कह रहे, लग माणिक koans में कोई गलती नहीं है की तरह, hash2[:two] वापस आ जाएगी "dos"

Hash.new विधि दस्तावेज़ पर एक नजर डालें

नए → new_hash
नई (obj) → new_hash
नया {| हैश, कुंजी | ब्लॉक} → new_hash

एक नया, खाली हैश देता है। यदि इस हैश को बाद में कुंजी द्वारा एक्सेस किया गया है जो हैश प्रविष्टि के अनुरूप नहीं है, तो मान लौटाया गया हैश हैश बनाने के लिए उपयोग की जाने वाली नई शैली की शैली पर निर्भर करता है। पहले फॉर्म में, पहुंच शून्य लौटाती है। यदि ओबीजे निर्दिष्ट है, तो यह एकल ऑब्जेक्ट सभी डिफ़ॉल्ट मानों के लिए उपयोग किया जाएगा। यदि कोई ब्लॉक निर्दिष्ट किया गया है, तो यह हैश ऑब्जेक्ट और कुंजी के साथ बुलाया जाएगा, और डिफ़ॉल्ट मान वापस करना चाहिए। यदि आवश्यक हो तो हैश को में मान को स्टोर करने की ब्लॉक की ज़िम्मेदारी है।

Sidenote: आप वास्तविक कोड चला कर या irb या pry में लाइनों की जोड़ी को क्रियान्वित करते हुए ऐसे मामलों में अपनी उम्मीदों की पुष्टि कर सकते हैं (मैं जिज्ञासा सलाह देते हैं)।

+0

मैंने अपना प्रश्न संपादित कर लिया है, यह शून्य के बजाय "डॉस" होना चाहिए। –

4

koan के मूल है:

def test_default_value 
    hash1 = Hash.new 
    hash1[:one] = 1 

    assert_equal __, hash1[:one] 
    assert_equal __, hash1[:two] 

    hash2 = Hash.new("dos") 
    hash2[:one] = 1 

    assert_equal __, hash2[:one] 
    assert_equal __, hash2[:two] 
end 

त्रुटि koan में नहीं है, लेकिन दावे में आप पूरा कर दिया है:

assert_equal nil, hash2[:two] #hm? 

...

होना चाहिए
assert_equal "dos", hash2[:two] #hm? 
+0

मैंने अपना प्रश्न संपादित कर लिया है, यह शून्य के बजाय "डॉस" होना चाहिए। –

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