如何检查 '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