如何将getoptlong与变量选项一起使用?

问题描述

| 我有几个Nagios脚本,它们继承了一个常见的NagiosCheck类。由于每个检查的getopts选项都略有不同,因此我认为最好是通过NagiosCheck类方法生成可用选项。但是我被困住了... 这就是我所说的方法
class CheckFoobar < NagiosCheck
  ...
end

check = CheckFoobar.new
check.generate_options(
  [\'-H\',\'--hostname\',GetoptLong::required_ARGUMENT],[\'-P\',\'--port\',[\'-u\',\'--url\',GetoptLong::required_ARGUMENT])
方法本身:
class NagiosCheck
  ...
  def generate_options (*args)
    options = []

    args.each do |arg|
      options << arg
    end

    parser = GetoptLong.new
    options.each {|arg| parser.set_options(arg)}
  end
end
然后解析器仅存储最后一项:
p parser # => #<GetoptLong:0x00000000e17dc8 @ordering=1,@canonical_names={\"-u\"=>\"-u\",\"--url\"=>\"-u\"},@argument_flags={\"-u\"=>1,\"--url\"=>1},@quiet=false,@status=0,@error=nil,@error_message=nil,@rest_singles=\"\",@non_option_arguments=[]>
您对我有什么建议,如何使解析器存储所有参数? 问候, 麦克风 ...关于stackoverflow的第一个问题。如果我做错了任何事情,请多包涵,并让我知道,以便我能够适应。     

解决方法

generate_options方法太复杂。 Getoptlong.new将数组数组作为参数。
class NagiosCheck
  def generate_options (*args)
     GetoptLong.new(*args)
  end
end