从用户输入中查找声明的函数
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)
我的 "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)