如何检查' ARGV'包含' -p'和' -c'在optparse中

时间:2018-04-09 05:53:07

标签: ruby 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来过滤ARGV << 'h'

最好的方法是什么?

  

更新1:除非在运行我的程序问题之前添加除非:工作为   问,但是当-p或-c缺少参数时出错。例如:红宝石   thiscode.rb -p bababa -c error:rb:17:在`&#39;:缺失   参数(OptionParser :: MissingArgument)

1 个答案:

答案 0 :(得分:2)

在解析选项后,只需明确检查两者是否存在:

unless options[:pppp] && options[:coordinate]
  puts USAGE # or do whatever else
  exit
end