首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby OptionParser空开关"-“行为

Ruby OptionParser空开关"-“行为
EN

Stack Overflow用户
提问于 2012-04-05 23:51:07
回答 2查看 757关注 0票数 0

编辑:

我编写了使用OptionParser优雅地处理命令行输入的代码。我正面临两大打击。

  1. 传递空开关“-”不会出错。当然,有些程序认为这是有效的,但我的程序不应该这样。
  2. 该程序需要两个强制切换,但它接受一个开关而不抱怨!例如,program.ruby -f foo -b bar是有效的输入,两个开关都是:必需的。但只提供一个开关通过,没有问题,这不是想要的行为。

对于第一个案例,我已经这样做了:

代码语言:javascript
复制
opts.on('-', /\A-\Z/) do
  $stderr.print "Invalid empty switch"
  exit 1
end

效果很好。但这是正确的做法吗?

对于第二种情况,我已经在OptionParser.new块中四处寻找解决方案,但是找不到。例如:

代码语言:javascript
复制
unless options.foo && options.bar
  puts "Error."
  exit 2
end

在OptionParser.new块之外这样做是正常的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-06 11:23:22

如果您使用的是OptionParser,则需要显式禁止空开关并手动检查所需的参数。

但是,如果您使用另一个工具进行选项解析(如德芬尼特宝石选择 ),则可以将选项标记为必需的选项,无效选项(如空开关)将导致打印帮助并退出应用程序。我知道在某些情况下使用OptionParser更有意义,但就我个人而言,我更喜欢使用更方便的工具

尽管以一种或另一种方式确定所需的选项相当容易,但我建议您考虑您的API决定。您知道有多少命令行实用程序具有所需的选项?命令行通常分为选项和参数是有原因的,前者通常是可选的,后者通常是必需的。我会坚持那个既定的惯例。

票数 1
EN

Stack Overflow用户

发布于 2012-04-06 04:29:52

我认为Thor(https://github.com/wycats/thor)可以更有效地解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10037585

复制
相关文章

相似问题

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