我刚刚用 ruby 编写了我的第一个终端应用程序。我OptionParser
用来解析选项及其参数。但是我想创建命令。例如:
git add .
在上面的行中,add
是在应用程序之后不能出现在其他任何地方的命令。我如何创建这些。
如果有人能指出我正确的方向,我将不胜感激。但是,请不要引用指挥官等任何宝石。我已经知道这些了。我想了解它是如何完成的。
我刚刚用 ruby 编写了我的第一个终端应用程序。我OptionParser
用来解析选项及其参数。但是我想创建命令。例如:
git add .
在上面的行中,add
是在应用程序之后不能出现在其他任何地方的命令。我如何创建这些。
如果有人能指出我正确的方向,我将不胜感激。但是,请不要引用指挥官等任何宝石。我已经知道这些了。我想了解它是如何完成的。
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
命令行工具。
Array#shift
您可以通过事先调用来检索命令OptionParser
。