ruby如何传递方法并使用参数调用它

时间:2016-06-03 23:43:17

标签: ruby

我尝试在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中的参数调用它?

1 个答案:

答案 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)