首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby OptionParser不设置参数。

Ruby OptionParser不设置参数。
EN

Stack Overflow用户
提问于 2017-02-21 18:25:23
回答 1查看 33关注 0票数 1

这是我的解析器:

代码语言:javascript
复制
options = { frames: 12, showcurrent: false}
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"
  opts.on("-f", "--frames", "Only tickets of the last x time frames (default: 12)", Integer) { |v| options[:frames] = v }
  opts.on("-c", "--show_current", "Show current (false (default) ot true)") { |v| options[:showcurrent] = v }
  opts.on("-t", "--time", "Type of the report (day, week (default), month, quarter, year)", String) { |v| options[:time] = v }
  opts.on("-w", "--year_week YEAR-WEEK", "wrYYWW (wr1707)", String) { |v| options[:yw] = v }
end
optparse.parse!
puts options

在我使用ruby main.rb -t 'w' -w 'wr1707'运行代码之后,选项如下:

代码语言:javascript
复制
{:frames=>12, :showcurrent=>false, :time=>nil, :yw=>"wr1707"}

出于某种原因,选项:时间没有设置,我不明白为什么。是不是转换有问题,不允许我使用-t作为参数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-21 22:35:06

当需要参数时,您应该告诉OptionParser是哪个参数,以及它是可选的还是必须的,请参见documentation

代码语言:javascript
复制
"--switch=MANDATORY" or "--switch MANDATORY"
"--switch[=OPTIONAL]"
"--switch"

因此,在您的示例中,对于time选项,描述应如下所示:

代码语言:javascript
复制
opts.on("-t", "--time TIME", "Type of the report (day, week (default), month, quarter, year)", String) { |v| options[:time] = v }

或者像这样,如果你想做可选的:

代码语言:javascript
复制
opts.on("-t", "--time [TIME]", "Type of the report (day, week (default), month, quarter, year)", String) { |v| options[:time] = v }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42364702

复制
相关文章

相似问题

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