gpt4 book ai didi

Ruby OptionParser 空开关 "-"行为

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:49 25 4
gpt4 key购买 nike

编辑:

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

  1. 传递空开关“-”不会产生错误。当然,有些程序认为这是有效的,但我的程序不应该。
  2. 该程序需要两次强制切换,但它毫无怨言地接受了一次切换!例如program.ruby -f foo -b bar 是有效输入,两个开关都是 :REQUIRED。但仅提供一个开关就可以顺利通过,这不是所需的行为。

对于第一种情况,我这样做了:

opts.on('-', /\A-\Z/) do
$stderr.print "Invalid empty switch"
exit 1
end

它工作正常。但这是正确的做法吗?

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

unless options.foo && options.bar
puts "Error."
exit 2
end

在 OptionParser.new block 之外进行是正常的方法吗?

最佳答案

如果您使用的是 OptionParser,那么是的,您需要明确禁止空开关并手动检查所需的参数。

但是,如果您使用其他工具进行选项解析,例如 defunkt's gem choice ,您可以将选项标记为必需,无效选项(例如空开关)将导致打印帮助并退出应用程序。我知道在某些情况下使用 OptionParser 更有意义,但我个人更喜欢使用 the more convenient tools out there .

尽管使选项成为必需选项非常简单,但我还是建议您仔细考虑您的 API 决策。您知道有多少命令行实用程序具有必需的选项?命令行通常分为选项和参数是有原因的,前者通常是可选的,而后者通常是必需的。我会坚持既定的惯例。

关于Ruby OptionParser 空开关 "-"行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com