从用户输入中查找声明的函数

Find declared function from user input

我的 "app" 中有一个提示,例如接受输入的 irb,我希望它解析输入并执行我定义的函数。 同样,我的应用程序通过 gets 获取输入并调用该函数。 例如,

command = gets.gsub("\n","")

接受输入"pwd",现在我想调用定义如下的函数pwd

def pwd
  Dir.pwd
end

现在,我可以简单地使用 if 条件来做到这一点,但其中很多条件都不会像 Ruby 的理念所要求的那样优雅。

问题

我想解析输入以调用定义的函数。 比如,"pwd" 调用 pwd"ls" 调用我定义的等效函数。

我该怎么做? 如果问题仍然不清楚,请发表评论。 干杯。

解决可能的重复问题

问题提示具体要运行Shell命令。然而,我只使用内置的 Ruby 方法和 类,也许将来我什至会使用 Gems,以获得平台独立性。我的命令可能看起来和表现得像 shell,但实际上我并不是 运行ning shell。因此,我的问题不可能重复。

此外,未来的读者会发现它有助于解析 Ruby 中的输入。

您可以以案例的形式为不同的输入编写映射:

case command
when "pwd"
  Dir.pwd # or move it into another method and call it here
when "ls"
  # etc
end

还是hash,稍微简洁一些

actions = {
  pwd: -> { Dir.pwd },
  ls: -> { <foobar> } 
}
actions[command.to_sym].call

您也可以使方法名称与命令匹配并使用send,但如果输入来自陌生人,请不要这样做:

def pwd
  Dir.pwd
end

command = command.to_sym
send(command)