首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby OptionParser不解析--命令正确

Ruby OptionParser不解析--命令正确
EN

Stack Overflow用户
提问于 2018-07-19 18:00:29
回答 2查看 958关注 0票数 3

下面是OptionParser的简化版本

代码语言:javascript
复制
    OptionParser.new do |opts|
      opts.on('-f', '--format FORMAT', 'output format (text, html, yml, json, xml)') do |format|
        options['format'] = format
      end
    end

以下是格式选项的试用版

代码语言:javascript
复制
[16] pry(main)> parse("-f s")
=> {"format"=>" s"}
[17] pry(main)> parse("--format s")
OptionParser::InvalidOption: invalid option: --format s

为什么--format s不能工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-19 19:49:30

手动调用parse时,需要传入ARGV,它不是脚本名称之后所有内容的字符串,而是拆分数组:

代码语言:javascript
复制
./example.rb -f s       # => ["-f", "s"]
./example.rb --format s # => ["--format", "s"]
./example.rb --format=s # => ["--format=s"]

因此,如果我们传递这些格式以进行解析,则可以正确地解析这些选项:

代码语言:javascript
复制
op.parse(['-f', 'a'])       # => {"format"=>"a"}
op.parse(['--format', 'b']) # => {"format"=>"b"}
op.parse(['--format=c'])    # => {"format"=>"c"}
票数 2
EN

Stack Overflow用户

发布于 2018-07-19 19:48:09

它可能无法工作,因为.parse方法应该接收作为参数的参数数组,而不是字符串。一旦将OptionParser放入实际的脚本和.parse(ARGV)中,长样式开关的--format s--format==s变体都应该可以工作。

opt.rb脚本:

代码语言:javascript
复制
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

用法:

代码语言:javascript
复制
~ ruby opt.rb -f s  
{"format"=>"s"}
~ ruby opt.rb --format s
{"format"=>"s"}
~ ruby opt.rb --format=s
{"format"=>"s"}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51429156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档