我对这种行为感到困惑。我是否真的需要拆分我的阵列才能使其工作?
pry(main)> ary = ["foo", "bar"]
=> ["foo", "bar"]
pry(main)> Hash[ary]
=> {"f"=>"o", "b"=>"a"}
pry(main)> Hash["foo", "bar"]
=> {"foo"=>"bar"}
pry(main)> Hash[["foo", "bar"]]
=> {"f"=>"o", "b"=>"a"}
pry(main)> Hash[ary.split(",")]
=> {"foo"=>"bar"}
答案 0 :(得分:3)
上面的尝试1和3是等效的,将单个一维数组传递给构造函数,这是不正确的。
为了使其按预期工作,您需要将参数作为单独的参数传递,或者作为对的二维数组传递>
# Split the array into args (equivalent to example #2 above)
# equivalent to Hash[key1, val1, key2, val2]
Hash[*ary]
# or wrap the array in another array (an array of nested pairs)
# equivalent to Hash[[[key1,val1],[key2,val2]]]
Hash[[ary]]
您看到的错误行为可能是因为构造函数需要一个长度为2的数组数组,而您传递了一个字符串数组。它将arg[0]
解释为每对的关键字,并arg[1]
作为值,在本例中为f
和o
,b
和a