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
おそらく、これはモジュールに精通している人にとっては単なる質問です。