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 प्रकार को स्ट्रिंग करने के लिए प्रकार को बदलता है।
यह उसी संग्रह में तत्व जोड़ने के लिए खतरनाक लग रहा है जिसे आप पुन: सक्रिय कर रहे हैं। –