Ruby:如何使用'send'方法调用方法,使用哈希?

时间:2010-09-10 18:03:01

标签: ruby dynamic

假设我有A类,其中包含一些方法。

让我们说string methodName是这些方法之一,我已经知道我想要给它的参数。他们在哈希{'param1'=> value1,'param2'=>值2}

所以我有:

params = {'param1' => value1, 'param2' => value2}
a = A.new()
a.send(methodName, value1, value 2) # call method name with both params

我希望能够以某种方式通过传递我的哈希来调用该方法。这可能吗?

2 个答案:

答案 0 :(得分:8)

确保methodName是一个符号,而不是一个字符串(例如methodName.to_sym)

无法将散列传递给发送,你需要一个数组,其中的键/值不是特定的顺序,但方法的参数必须是,所以你需要一些明智的方法来获取这些值的顺序正确。

然后,我认为您需要使用splat运算符(*)传入该数组以进行发送。

methodName = 'center'    
params = {'param1' => 20, 'param2' => '_'}.sort.collect{|k,v| v}
a = "This is a string"
a.send(methodName.to_sym, *params)

=> "__This is a string__"

类似的东西。

答案 1 :(得分:2)

我目前正在使用Ruby 2.2.2,您可以使用关键字mechanic传递哈希和send:

params = {param1: value1, param2: value2}
a = A.new()
a.send(methodName, params)