我尝试在ruby中执行以下操作,但它没有工作:
method_map = {
'one' => one
}
def one(param)
puts param
end
method_map['one']('hi')
然后我意识到在ruby中这将在我放括号之前调用该方法,所以我发现我可以传递一个方法名称
method_map = {
'one' => :one
}
method_map['one']('hi')
但它仍然无法运作。传递方法的正确方法是什么,然后使用ruby中的参数调用它?
答案 0 :(得分:4)
使用send
2.2.2 > send(method_map['one'], 'hi')
=> hi
使用call
2.2.2 > method(method_map['one']).call('hi')
=> hi
您也可以使用eval
(不推荐)
2.2.2 > eval "#{method_map['one']}('hi')"
=> hi
基准测试(100万次迭代)
user system total real
send 0.670000 0.000000 0.670000 ( 0.668050)
call 0.230000 0.000000 0.230000 ( 0.225053)
eval 4.920000 0.000000 4.920000 ( 4.919729)