下面是OptionParser的简化版本
OptionParser.new do |opts|
opts.on('-f', '--format FORMAT', 'output format (text, html, yml, json, xml)') do |format|
options['format'] = format
end
end以下是格式选项的试用版
[16] pry(main)> parse("-f s")
=> {"format"=>" s"}
[17] pry(main)> parse("--format s")
OptionParser::InvalidOption: invalid option: --format s为什么--format s不能工作?
发布于 2018-07-19 19:49:30
手动调用parse时,需要传入ARGV,它不是脚本名称之后所有内容的字符串,而是拆分数组:
./example.rb -f s # => ["-f", "s"]
./example.rb --format s # => ["--format", "s"]
./example.rb --format=s # => ["--format=s"]因此,如果我们传递这些格式以进行解析,则可以正确地解析这些选项:
op.parse(['-f', 'a']) # => {"format"=>"a"}
op.parse(['--format', 'b']) # => {"format"=>"b"}
op.parse(['--format=c']) # => {"format"=>"c"}发布于 2018-07-19 19:48:09
它可能无法工作,因为.parse方法应该接收作为参数的参数数组,而不是字符串。一旦将OptionParser放入实际的脚本和.parse(ARGV)中,长样式开关的--format s和--format==s变体都应该可以工作。
opt.rb脚本:
require 'optparse'
options = {}
parser = OptionParser.new do |opts|
opts.on('-f', '--format FORMAT', 'output format (text, html, yml, json, xml)') do |format|
options['format'] = format
end
end
parser.parse(ARGV)
p options用法:
~ ruby opt.rb -f s
{"format"=>"s"}
~ ruby opt.rb --format s
{"format"=>"s"}
~ ruby opt.rb --format=s
{"format"=>"s"}https://stackoverflow.com/questions/51429156
复制相似问题