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

Ruby OptionParser: how to handle arguments without a prefix (like a required filename)

我是第一次使用 OptionParser

我想知道的是如何让 OptionParser 处理没有以特定标志名作为前缀的参数。我希望能够写出如下语句:

myscript.rb -d someoption -b someotheroption filename

其中 filename 是我要处理的文件的名称。它没有任何选项标志作为前缀。如何使用 OptionParser 解析上述命令,并获取对 filename?

的引用

OptionParser 专门处理选项 - 即以破折号开头的内容。解析后,剩余的参数留在 ARGV 中。您可以在那里检查您的文件名,如果丢失则退出并报错。

minimal example

稍作修改
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"]