将Array与散列项一起使用

Tie*_*Dad 0 ruby

我有一个哈希:

h = {a: 1, b: 2}
Run Code Online (Sandbox Code Playgroud)

使用

a = Array(h)
Run Code Online (Sandbox Code Playgroud)

我期望的是这a是一个数组,h是一个项目a:[{a:1,b:2}]

a实际上[[:a, 1], [:b, 2]].

问题是,如何让我的预期aArray()

Ser*_*sev 6

我会做

a = [h]
Run Code Online (Sandbox Code Playgroud)

但如果你坚持使用Array,那么你可以这样做(使用Rails/ActiveSupport):

a = Array.wrap(h)
Run Code Online (Sandbox Code Playgroud)

正如Tom Lord在评论中提到的那样,你得到了你得到的结果,因为Array()(和它的兄弟一样Integer())是转换函数.他们接受输入并尝试将其转换为所需类型.而你想要别的东西.

  • 值得注意的是,`Array.wrap(obj)`比`[obj]`做的更多 - 参见[docs](http://api.rubyonrails.org/classes/Array.html#method-c-包裹). (3认同)