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

dfg*_*fgd 5 ruby dynamic

假设我有A类,其中有一些方法.

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

所以我有:

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

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

And*_*icz 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__"
Run Code Online (Sandbox Code Playgroud)

这样的事情.

  • "发送"字符串而不是符号有什么问题? (2认同)