为 Ruby 的 OptionParser 设置默认选项处理程序

7

我正在尝试在我的 Ruby 应用程序中实现简单的选项处理。 看起来 OptionParser 基本满足我的需求,但我无法找到一种优雅地处理意外参数的方法。

如果提供了任何意外的参数,我希望将其视为传递了 -h 参数(显示用法并退出)。 但是,我没有看到任何处理这种情况的方法。

如果 OptionParser 无法胜任,是否有其他库可用于轻松解析命令行参数?

2个回答

10

可能有更好的方法,但我不知道。我一般是这样做的:

  opts = OptionParser.new
  ...
  opts.on_tail("-h", "--help",
               "Show this message") do
    puts opts
    exit
  end
  begin      
    opts.parse!(argv)
  rescue OptionParser::InvalidOption => e
    puts e
    puts opts
    exit(1)
  end

这就是我最终所做的。它适用于我正在处理的情况,但我更愿意能够为任何未明确定义的选项设置通配符回调。 - Herms
我很好奇为什么这对于任何未明确定义的选项都不起作用。OptionParser难道不会始终引发InvalidOption错误吗? - liquidki
@liquidki - 我认为它会起作用,因为OptionParser会针对未定义的选项引发InvalidOption错误。 - Wayne Conrad

0

如果您将以下内容保存为test.rb

#/usr/bin/env ruby
require 'optparse'

test = nil
help = nil
ARGV.options {|opt|
  opt.on("--test=test") {|val| test=val}
  help = opt.help
  begin
    opt.parse!
  rescue OptionParser::InvalidOption => e
    puts help
  end
}

并在终端中执行以下命令:

$./test.rb --foo

你得到以下内容。

Usage: test [options]
    --test=test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接