2011-05-31 16 views
5

निम्न स्क्रिप्ट को देखते हुए, मुझे रुबी 1.8.7 और रूबी 1.9.2 का उपयोग करके एक अलग आउटपुट दिखाई देता है। मेरा सवाल यह है कि रूबी हैश में क्या बदलाव आया है जो इस विशेष व्यवहार को लागू करता है?रुबी हैश अंतर 1.8.7 और 1.9.2

def to_params(_hash) 
    params = '' 
    stack = [] 

    _hash.each do |k, v| 
    if v.is_a?(Hash) 
     stack << [k,v] 
    else 
     #v = v.first if v.is_a?(Array) 
     params << "#{k}=#{v}&" 
    end 
    end 

    stack.each do |parent, hash| 
    hash.each do |k, v| 
     if v.is_a?(Hash) 
     stack << ["#{parent}[#{k}]", v] 
     else 
     params << "#{parent}[#{k}]=#{v}&" 
     end 
    end 
    end 

    params.chop! # trailing & 
    params 
end 

q = {"some_key"=>["some_val"], "another_key"=>["another_val"]} 
n = convert_params(q) 

puts n 
  • रूबी 1.8.7 उत्पादन:

some_key=some_val&another_key=another_val

  • रूबी 1.9.2 उत्पादन:

some_key=["some_val"]&another_key=["another_val"]

1.9.2 मूल्य के "ऐरे" प्रकार को बरकरार रखता है जबकि 1.8.7 प्रकार को स्ट्रिंग करने के लिए प्रकार को बदलता है।

+1

यह उसी संग्रह में तत्व जोड़ने के लिए खतरनाक लग रहा है जिसे आप पुन: सक्रिय कर रहे हैं। –

उत्तर

7

दो चीजें बदल गई (बाद अपने अवलोकन किया जा रहा है):

  • Hashes अब
  • array.to_s आदेश दिया जाता है array.join वापस जाने के लिए प्रयोग किया जाता है, अब यह रिटर्न array.inspect (1.8.7 और 1.9.2 देखें)।
संबंधित मुद्दे