首页 > 解决方案 > 将输入参数传递给 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

提前感谢大家。

标签: rubyshellpromptreadline

解决方案


虽然如果你足够努力的话这可能会奏效,但简单的方法是:

hash = {
  'command_1' => :method_1,
  'command_2' => :method_2
}

send(hash[input.to_s])

send方法允许动态调度,这比尝试处理method.


推荐阅读