ruby - 将输入参数传递给 ruby 编写的 shell?
问题描述
我正在尝试用 Ruby(使用readline
)编写一个 shell,实现一些自定义命令。为了创建给定输入和在外部模块中定义的方法之间的对应关系,我使用了这样的哈希
hash = {
'command_1' => method(:method_1),
'command_2' => method(:method_2)
}
一旦我得到用户输入,我将它传递给调用与命令键关联的方法的哈希
hash[input.to_s].()
我的问题是:如何处理同一命令的变体?(例如,对于help
命令给出不同的输出取决于是否给出了标志,例如help -command_1
)
如何将参数传递给哈希中的方法?(例如,将open
要打开的文件传递给命令,例如open file_name
)
提前感谢大家。
解决方案
虽然如果你足够努力的话这可能会奏效,但简单的方法是:
hash = {
'command_1' => :method_1,
'command_2' => :method_2
}
send(hash[input.to_s])
该send
方法允许动态调度,这比尝试处理method
.
推荐阅读
- c# - C#中的使用语句
- java - 有什么方法可以不在 spring-boot-starter-data-jpa 依赖项中使用 exclude 并保持相同的存储?
- javascript - (原因:缺少 CORS 标头“Access-Control-Allow-Origin”)
- python - 有效地循环遍历所有可能的加权节点图并计算最大团大小>k的概率
- java - 无需修改且无需 xml 配置即可创建遗留类的 bean
- download - 我对使用 C# 中的线程和最快方式从谷歌数据存储下载 1.5 GB 数据有疑问
- android - 在 android API 级别 23 到 25(棉花糖和牛轧糖)中不接受来电
- android - 使用 Firebase 推送通知时出错
- excel - VBA在数据库中导入格式化为矩阵的数据
- javascript - 使用编辑的对象属性返回新的 redux 状态