如何检查 'ARGV' 在 optparse 中是否同时包含“-p”和“-c”
How to check if 'ARGV' contains both '-p' and '-c' in optparse
此代码旨在检查用户是否使用以下命令输入选项:
require 'optparse'
ARGV << '-h' if ARGV.empty?
options = {}
OptionParser.new do |parser|
parser.banner = "Usage: myruby.rb [options]"
parser.on("-h", "--help", "Help myruby") do | |
puts parser
exit
end
parser.on("-p", "--people PEOPLE", "PPPPPPPPPP") do |v|
options[:pppp] = v
end
parser.on("-c", "--coordinate COORDINATE", "ccccccccc") do |x|
options[:coordinate] = x
end
end.parse!
# Start my program from this line
unless options[:pppp] && options[:coordinate]
puts "Exit OK because missing both (option and argument) p,c"
exit
end
puts "It work if only run myruby.rb -p argument_P -c argument_c"
我刚发现一个错误。如果用户只输入一个而不是两个都需要ARGV (-p -c)
。
我可以检查并退出我的应用程序,但我想通过退出分配 ARGV << 'h'
.
来过滤 ARGV
最好的方法是什么?
updated 1: Added unless case before run my program problem : Worked as
asked, but error when -p or -c missing argument. example : ruby
thiscode.rb -p bababa -c error : rb:17:in `': missing
argument (OptionParser::MissingArgument)
只需在解析选项后显式检查两者是否存在:
unless options[:pppp] && options[:coordinate]
puts USAGE # or do whatever else
exit
end
此代码旨在检查用户是否使用以下命令输入选项:
require 'optparse'
ARGV << '-h' if ARGV.empty?
options = {}
OptionParser.new do |parser|
parser.banner = "Usage: myruby.rb [options]"
parser.on("-h", "--help", "Help myruby") do | |
puts parser
exit
end
parser.on("-p", "--people PEOPLE", "PPPPPPPPPP") do |v|
options[:pppp] = v
end
parser.on("-c", "--coordinate COORDINATE", "ccccccccc") do |x|
options[:coordinate] = x
end
end.parse!
# Start my program from this line
unless options[:pppp] && options[:coordinate]
puts "Exit OK because missing both (option and argument) p,c"
exit
end
puts "It work if only run myruby.rb -p argument_P -c argument_c"
我刚发现一个错误。如果用户只输入一个而不是两个都需要ARGV (-p -c)
。
我可以检查并退出我的应用程序,但我想通过退出分配 ARGV << 'h'
.
ARGV
最好的方法是什么?
updated 1: Added unless case before run my program problem : Worked as asked, but error when -p or -c missing argument. example : ruby thiscode.rb -p bababa -c error : rb:17:in `': missing argument (OptionParser::MissingArgument)
只需在解析选项后显式检查两者是否存在:
unless options[:pppp] && options[:coordinate]
puts USAGE # or do whatever else
exit
end