如何将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
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...