使用Ruby中方法名称的字符串/变量调用方法

时间:2011-09-30 20:49:16

标签: ruby design-patterns

  

可能重复:
  How to turn a string into a method call?

目前我有一个代码正在做这样的事情

def execute
  case @command
    when "sing"
      sing()
    when "ping"
      user_defined_ping()
    when "--help|-h|help"
      get_usage()      
end

我觉得这个案子很无用而且很庞大,我只想通过使用变量@command调用适当的方法。类似的东西:

def execute
 @command()
end

在这种情况下,我不需要和额外的execute()方法。

关于如何实现这款红宝石的任何建议?

谢谢!

编辑: 为多个字符串添加了其他方法类型。不确定是否也可以优雅地处理。

2 个答案:

答案 0 :(得分:5)

查看send

send(@command) if respond_to?(@command)

respond_to?确保self在尝试执行此方法之前响应此方法

对于更新后的get_usage()部分,我会使用类似的内容:

def execute
  case @command
  when '--help', '-h', 'help'
    get_usage()
  # more possibilities
  else
    if respond_to?(@command)
      send(@command)
    else
      puts "Unknown command ..."
    end
  end
end

答案 1 :(得分:1)

您正在寻找send。看看这个:http://ruby-doc.org/core/classes/Object.html#M000999

def execute
    send @command
end