假设我有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
我希望能够以某种方式通过传递我的哈希来调用该方法。这可能吗?
答案 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)