0

Ruby の open4 からのこのスニペットを検討してください。

  def spawn arg, *argv
    argv.unshift(arg)
    opts = ((argv.size > 1 and Hash === argv.last) ? argv.pop : {})
    argv.flatten!
    cmd = argv.join(' ')


    getopt = getopts opts

    ignore_exit_failure = getopt[ 'ignore_exit_failure', getopt['quiet', false] ]
    ignore_exec_failure = getopt[ 'ignore_exec_failure', !getopt['raise', true] ]
    exitstatus = getopt[ %w( exitstatus exit_status status ) ]
    stdin = getopt[ %w( stdin in i 0 ) << 0 ]
    stdout = getopt[ %w( stdout out o 1 ) << 1 ]
    stderr = getopt[ %w( stderr err e 2 ) << 2 ]
    pid = getopt[ 'pid' ]
    timeout = getopt[ %w( timeout spawn_timeout ) ]
    stdin_timeout = getopt[ %w( stdin_timeout ) ]
    stdout_timeout = getopt[ %w( stdout_timeout io_timeout ) ]
    stderr_timeout = getopt[ %w( stderr_timeout ) ]
    status = getopt[ %w( status ) ]
    cwd = getopt[ %w( cwd dir ) ]

gem を使用するコードからこの関数を呼び出すときに、ignore_exit_failure == true にしたいとします。どうすればいいですか?

編集: getopts は、オプションを渡すための標準的な Ruby モジュールであると想定していたと思います。Alex Kliuchnikau のコメントによる getopts の定義は次のとおりです。

  def getopts opts = {}
    lambda do |*args|
      keys, default, ignored = args
      catch(:opt) do
        [keys].flatten.each do |key|
          [key, key.to_s, key.to_s.intern].each do |key|
            throw :opt, opts[key] if opts.has_key?(key)
          end
        end
        default
      end
    end
  end
  module_function :getopts

open4おそらく、これはモジュールに精通している人にとっては単なる質問です。

4

1 に答える 1

0

この方法でパラメーターを渡す必要があります。

open4.spawn cmd, 'ignore_exit_failure' => true

指定しない場合は、パラメータignore_exit_failureの値に設定されquietます。

open4.spawn cmd, 'quiet' => true

また、指定されていない場合は、 に設定さignore_exit_failurefalseます。

于 2012-02-03T09:46:55.090 に答える