从用户输入

时间:2017-02-10 15:21:16

标签: ruby parsing irb

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

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

接受输入"pwd",现在我要调用函数pwd,其定义如下:

def pwd
  Dir.pwd
end

现在,我可以简单地使用if条件来实现这一点,但是很多这些条件并不像Ruby的哲学所要求的那样优雅。

问题

我想解析输入以调用已定义的函数。 就像,"pwd"来电pwd"ls"调用我已定义的等效函数。

我该怎么做? 评论问题是否仍然不明确。 欢呼声。

解决可能的重复

建议的问题特别想要运行 Shell 命令。然而,我只使用内置的Ruby方法和类,并且将来我甚至可以使用Gems,以获得平台独立性。我的命令可能看起来和行为像shell,但我实际上并没有运行shell。因此,我的问题不一定是重复的。

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

1 个答案:

答案 0 :(得分:1)

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

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

或哈希,稍微简洁

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

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

def pwd
  Dir.pwd
end

command = command.to_sym
send(command)