OptionParser没有内置的检查必填选项的方法。不过,在解析后进行检查很容易:
if options[:grade].nil?
abort(opt_parse.help)
end
如果您不需要处理过于复杂的内容,手动解析命令行相对容易:
abort('Usage: ' + $0 + ' site id ...') unless ARGV.length >= 2
site = ARGV.shift
ARGV.each do | id |
end
但是当你的选项开始变得更加复杂时,你可能需要使用一个选项解析器,比如 OptionParser:
require 'optparse'
options = {}
optparse = OptionParser.new do |opts|
opts.banner = "Usage: #{$0} -s NAME id ..."
opts.on("-s", "--site NAME", "Site name") do |s|
options[:site] = s
end
opts.on( '-h', '--help', 'Display this screen' ) do
puts opts
exit
end
end
optparse.parse!
还有一种非破坏性的解析
,但如果您计划使用ARGV
中剩余的内容,则它不太有用。
OptionParser类没有强制执行必填参数(例如此处的--site
)的方法。但是,在运行parse!
后,您可以自行检查:
if options[:site].nil? or ARGV.length == 0
abort(optparse.help)
end
如果需要更通用的强制选项处理程序,请参见此答案。如果不清楚的话,除非你特意使它们成为强制选项,否则所有选项都是可选的。