5
鑑於以下腳本,我使用Ruby 1.8.7和Ruby 1.9.2看到不同的輸出。我的問題是,Ruby哈希中改變了這種特定行爲的變化是什麼?紅寶石哈希差異在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將類型隱式地更改爲字符串。
將元素添加到您正在迭代的相同集合看起來很危險。 – 2011-05-31 15:38:42