编辑:
我编写的代码使用OptionParser优雅地处理命令行输入我面临两大打击。
传递空开关“-”不会产生错误当然有些程序认为这是有效的,但我的不应该。
这个程序需要两个强制开关,但它可以毫无怨言地接受一个开关例如,program.ruby -f foo -b bar
是有效输入,两个开关都是:必需的但是只要一个开关通过就没有问题,这不是期望的行为。
我做的第一件事是:
opts.on('-', /\A-\Z/) do
$stderr.print "Invalid empty switch"
exit 1
end
它工作得很好但这是正确的做法吗?
对于第二种情况,我在OptionParser.new块中到处寻找解决方案,但找不到例如
unless options.foo && options.bar
puts "Error."
exit 2
end
在optionparser.new块之外执行是正常的方式吗?
最佳答案
如果使用的是OptionParser,则需要显式禁止空开关并手动检查所需参数。
但是,如果使用另一种工具进行选项解析,如defunkt's gem choice,则可以根据需要标记选项,无效选项(如空开关)将导致帮助打印并退出应用程序。我知道在某些情况下使用OptionParser更有意义,但我个人更喜欢使用the more convenient tools out there。
尽管做出所需的选项很容易,但我还是建议您仔细考虑您的api决策。您知道有多少命令行实用程序具有必需的选项命令行通常分为选项和参数是有原因的,前者通常是可选的,后者通常是必需的我会遵守既定的惯例。
关于ruby - Ruby OptionParser空开关“-”的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10037762/