1

共通のNagiosCheckクラスを継承するNagiosスクリプトがいくつかあります。すべてのチェックにはわずかに異なるgetoptsオプションがあるため、NagiosCheckクラスメソッドを介して使用可能なオプションを生成するのが最善だと思いました。しかし、私は立ち往生しています...

これは私がメソッドを呼び出す方法です:

class CheckFoobar < NagiosCheck
  ...
end

check = CheckFoobar.new
check.generate_options(
  ['-H', '--hostname', GetoptLong::REQUIRED_ARGUMENT],
  ['-P', '--port', GetoptLong::REQUIRED_ARGUMENT],
  ['-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=[]>
  1. パーサーにすべての引数を格納させる方法についてアドバイスはありますか?

よろしく、
マイク

...ここでstackoverflowに関する最初の質問。私が何か間違ったことをした場合は、私が適応できるように私に知らせてください。

4

1 に答える 1

1

generate_optionsメソッドは複雑すぎます。Getoptlong.newは、配列の配列を引数として取ります。

class NagiosCheck
  def generate_options (*args)
     GetoptLong.new(*args)
  end
end
于 2011-05-25T14:47:44.690 に答える