Ruby OptionParser 不解析 -- 命令正确

标签 ruby optionparser

这是 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 不起作用?

最佳答案

当您调用 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"}

关于Ruby OptionParser 不解析 -- 命令正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51429156/

相关文章:

ruby - 使用字符串作为函数名称

ruby - 为什么我在一个明显存在的对象上得到 "undefined method for nil:NilClass"?

python - 在 Python 中解析空选项

python - 理解 OptionParser

python - 如何字符串格式 OptionParser() 帮助消息?

python - 在同一 python 执行中多次调用 OptionParser.parse_args()

ruby - 为什么语法突出显示不适用于 Chrome Devtools 中的 Ruby 文件 (.erb)?

ruby-on-rails - Rails 模型属于属于模型的模型,但我想使用另一个名称

python - OptionParser 是否与 Sphinx 冲突?

ruby-on-rails - 从 Rails 模型内部访问翻译文件 (i18n)