Ruby的OptionParser:如何处理没有前缀的参数(例如必需的文件名)

8

我第一次使用OptionParser

我想知道,如何让OptionParser处理没有带有特定标志名称的参数。我希望能够编写这样的语句:

myscript.rb -d someoption -b someotheroption filename

在上述命令中,filename 是我想要操作的文件名,没有任何选项前缀。我该如何使用 OptionParser 解析上述命令,并获取对 filename 的引用?

1个回答

7
OptionParser专门处理以破折号开头的选项。解析后,剩余的参数将保留在ARGV中。您可以在那里检查文件名,并在缺失时退出并显示错误信息。
通过对他们最简示例进行轻微修改,
require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"

  opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
    options[:verbose] = v
  end
end.parse!

p options
p ARGV
p "Where is my hat?!" if ARGV.length == 0

您将得到以下内容:
$ ruby parse.rb
{}
[]
"Where is my hat?!"

$ ruby parse.rb hat
{}
["hat"]

$ ruby parse.rb -v hat
{:verbose=>true}
["hat"]

1
谢谢!这正是我在寻找的。它完美地运作。 - Qqwy

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