0

我刚刚用 ruby​​ 编写了我的第一个终端应用程序。我OptionParser用来解析选项及其参数。但是我想创建命令。例如:

git add .

在上面的行中,add是在应用程序之后不能出现在其他任何地方的命令。我如何创建这些。

如果有人能指出我正确的方向,我将不胜感激。但是,请不要引用指挥官等任何宝石。我已经知道这些了。我想了解它是如何完成的。

4

2 回答 2

2

OptionParserparse!接受一组参数。默认情况下,它将采取ARGV,但您可以像这样覆盖此行为:

基本方法

def build_option_parser(command)
  # depending on `command`, build your parser
  OptionParser.new do |opt|
    # ...
  end
end

args = ARGV
command = args.shift # pick and remove the first option, do some validation...
@options = build_option_parser(command).parse!(args) # parse the rest of it

进阶方法

考虑一种面向对象的方法,而不是build_option_parser具有大量案例陈述的方法:

class AddCommand
  attr_reader :options
  def initialize(args)
    @options = {}
    @parser = OptionParser.new #...
    @parser.parse(args)
  end
end

class MyOptionParser
  def initialize(command, args)
    @parser = {
      'add' => AddCommand,
      '...' => DotsCommand
    }[command.to_s].new(args)
  end
  def options
    @parser.options
  end
end

备择方案

当然,存在大量的 Rubygems(嗯,该列表中有 20 个),它们可以解决您的问题。我想提一下Thor的强大功能,例如rails命令行工具。

于 2013-05-18T16:17:35.843 回答
0

Array#shift您可以通过事先调用来检索命令OptionParser

于 2013-05-18T16:09:08.617 回答