根据变量的值调用不同的方法,而不在Ruby中使用if-else块

时间:2014-04-26 17:53:22

标签: ruby methods

我有一个变量name,它可以包含三个不同值中的一个:"name1""name2""name3"。根据不同的价值,我必须调用不同的值。对于"name1",我需要致电method_name1"name2",我需要致电method_name2,同样致"name3",我需要致电method_name3 }。

目前,我这样做:

if(name == "name1")
  output = method_name1(name)
elsif(name == "name2")
  output = method_name2(name)
elsif(name == "name3")
  output = method_name3(name)
end

如何使用if-elses,我怎样才能拥有应用方法的地图?如何在Ruby中做到这一点?

1 个答案:

答案 0 :(得分:5)

method_map = { 'name1' => :method_name1,
               'name2' => :method_name2,
               'name3' => :method_name3}

send(method_map[name])

如果name是实际的方法名称,您可以简单地

send(name)

如果您可以从名称计算method_name,可以尝试:

send("method_#{name}")

如果这些方法有参数 - 只需将它们添加到send方法:

send(name, some, other, args)