我的“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中解析输入很有帮助。
答案 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)