Ruby OptionParser空开关“ - ”行为

时间:2012-04-05 23:51:08

标签: ruby optionparser

编辑:

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

  1. 传递空开关' - '不会出错。当然有些程序认为有效,但我的不应该这样。
  2. 该程序需要两个强制开关,但它接受一个开关而不抱怨!例如program.ruby -f foo -b bar是有效输入,两个开关都是:REQUIRED。但只提供一个开关没有问题,这不是理想的行为。
  3. 对于第一个案例我已经这样做了:

    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块之外进行是正常的方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

尽管以某种方式提供所需的选项非常简单,但我建议您考虑您的API决策。您知道有多少命令行实用程序,它们有必要的选项?命令行通常分为选项和参数,前者通常是可选的,后者通常是必需的。我会坚持这个既定的惯例。

答案 1 :(得分:0)

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