【问题标题】:Ruby OptionParser: how to handle arguments without a prefix (like a required filename)Ruby OptionParser:如何处理没有前缀的参数(如所需的文件名)
【发布时间】:2015-08-14 14:44:40
【问题描述】:
我是第一次与OptionParser 合作。
我想知道的是,如何使 OptionParser 处理没有以某个标志名为前缀的参数。我希望能够写出这样的语句:
myscript.rb -d someoption -b someotheroption filename
filename 是我要处理的文件的名称。它没有任何选项标志的前缀。如何使用 OptionParser 解析上述命令,并获得对 filename 的引用?
【问题讨论】:
标签:
ruby
command-line-tool
command-line-arguments
【解决方案1】:
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"]