编辑:
我编写的代码使用OptionParser来优雅地处理命令行输入。我正面临两大打击。
program.ruby -f foo -b bar
是有效输入,两个开关都是:REQUIRED。但只提供一个开关没有问题,这不是理想的行为。对于第一个案例我已经这样做了:
opts.on('-', /\A-\Z/) do
$stderr.print "Invalid empty switch"
exit 1
end
工作正常。但这是正确的做法吗?
对于第二种情况,我在OptionParser.new块中寻找解决方案,但我找不到一个。 e.g。
unless options.foo && options.bar
puts "Error."
exit 2
end
在OptionParser.new块之外进行是正常的方法吗?
答案 0 :(得分:1)
如果您使用OptionParser,则是,您需要明确禁止空开关并手动检查所需参数。
但是,如果您使用其他工具进行选项解析(例如defunkt's gem choice),则可以根据需要标记选项,无效选项(例如空开关)将导致打印帮助并退出应用程序。我理解在某些情况下使用OptionParser更有意义,但我个人更喜欢使用the more convenient tools out there。
尽管以某种方式提供所需的选项非常简单,但我建议您考虑您的API决策。您知道有多少命令行实用程序,它们有必要的选项?命令行通常分为选项和参数,前者通常是可选的,后者通常是必需的。我会坚持这个既定的惯例。
答案 1 :(得分:0)
我认为Thor(https://github.com/wycats/thor)可以更有效地解决您的问题。