【发布时间】:2019-05-12 20:39:49
【问题描述】:
我正在尝试用 Ruby 编写一个 shell(使用 readline),实现一些自定义命令。为了创建给定输入和在外部模块中定义的方法之间的对应关系,我使用了这样的哈希
hash = {
'command_1' => method(:method_1),
'command_2' => method(:method_2)
}
一旦我得到用户输入,我就会将它传递给调用与命令键关联的方法的哈希
hash[input.to_s].()
我的问题是:如何处理同一命令的变体? (例如,对于help 命令,根据是否给出标志给出不同的输出,例如help -command_1)
如何将参数传递给哈希中的方法? (例如,将要打开的文件传递给open 命令,如open file_name)
在此先感谢大家。
【问题讨论】:
-
您可以通过
.()方法调用传递参数。 -
如上所述,在 ruby 中围绕 CLI 编写了完整的框架 - 这可能会让您的生活比尝试重新发明轮子更容易!但是,如果您真的想构建自己的(或完全控制整个应用程序的工作方式),基本方法(包括 ruby 在内的多种语言)是使用
ARGV。 -
我用 ruby 写了一个像这样的简单 shell,使用 readline,它位于 github.com/kontena/kontena-plugin-shell
标签: ruby shell prompt readline