Ruby-unpack哈希到参数列表中

时间:2016-07-15 01:32:22

标签: ruby rspec hashmap parameter-passing

问题

如何转动

arg2 = {a: "a", b: "b"}
method(arg1, arg2)

进入这个:

method(arg1, a: "a", b: "b")


背景

<小时/> 我试图在double中制作RSpec,其中包含以下参数:

let(:dummy_obj) do
  [ double("my dummy object", name: "Mr. Jo", height: "10ft", etc) ]
end

第一个arg是双重对象的名称,之后你可以添加任意数量的键值对,这些键值对成为双重方法(例如dummy_obj.height()将返回"10ft") 。

我想要使用一个巨大的JSON哈希,其中JSON中的每个第一级字段都成为double中的方法。所以,我希望有像*array这样的东西解包散列中的每个项目,因为它是自己的散列。

2 个答案:

答案 0 :(得分:5)

此:

method(arg1, a: "a", b: "b")

与此相同:

method(arg1, { a: "a", b: "b" })

Ruby允许你在哈希是最后一个参数时省略花括号({})。

因此,您的代码已经完全符合您的要求:

arg2 = { a: "a", b: "b" }
method(arg1, arg2)

答案 1 :(得分:-1)

我发现这有效:

double("dummy thing", *my_hash.map {|h| {h[0] => h[1]}} )

但感觉有点hacky,仍然对其他建议持开放态度。

:)