ruby - 在Ruby中使用方法名的字符串/变量调用方法

标签 ruby design-patterns

<分区>

Possible Duplicate:
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

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

关于我如何获得这个 ruby 有什么建议吗?

谢谢!

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

最佳答案

查看 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

关于ruby - 在Ruby中使用方法名的字符串/变量调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7615943/

相关文章:

java - 需要实现 Virgil Dobjanschi REST 实现模式的示例 Android REST 客户端项目

javascript - "saving"变量有什么原因吗?

ruby - 为什么 Ruby 中的 && 有时会进行快捷方式评估,有时却不会?

ruby 正则表达式 : how to get group value

ruby - 如何计算使用 :focus in a git hook? 过滤的 RSpec 示例

oop - 责任链和过滤模式有什么区别

c# - 多种服务的WCF服务架构

javascript - 出于某种原因,每个用户记录两次可投票选票

ruby - 如何将其他 Rack 应用程序(例如 Grape API)挂载到 Padrino 应用程序?

c++ - 用于公开缓存数据的同步线程安全 API