Ruby哈希差异在1.8.7和1.9.2

时间:2011-05-31 13:48:11

标签: ruby

鉴于以下脚本,我看到使用Ruby 1.8.7和Ruby 1.9.2的不同输出。我的问题是,Ruby哈希中的哪些内容会改变这种特殊行为?

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
  • Ruby 1.8.7输出:

some_key=some_val&another_key=another_val

  • Ruby 1.9.2输出:

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

1.9.2保留值的“Array”类型,而1.8.7隐式地将类型更改为string。

1 个答案:

答案 0 :(得分:7)

有两件事发生了变化(后者是你的观察):

  • 现在订购哈希
  • array.to_s过去常常返回array.join,现在返回array.inspect(请参阅1.8.71.9.2)。