最初の引数 (ある場合) で環境を指定する単純な Ruby アプリがあるとします:TEST
またはDEVELOPMENT
(PRODUCTION
引数DEVELOPMENT
が指定されていない場合はデフォルト)。例えば、
ruby myapp.rb test
モードで実行しTEST
ます。また、略記を受け入れる必要があるため、たとえば
ruby myapp.rb t
TEST
モードでアプリを実行し、
ruby myapp.rb dev
モードで実行しDEVELOPMENT
ます。
OptionParserを使用したいのですが、非常に奇妙な動作をします。myapp.rb が
require 'optparse'
environment = 'DEVELOPMENT'
opts = OptionParser.new
opts.on('test') { environment = 'TEST' }
opts.on('production') { environment = 'PRODUCTION' }
opts.parse!(ARGV)
環境はPRODUCTION
、私がどんな引数を渡しても変わりません。何らかの理由で、opts.on('production')
常にそのブロックを実行します。(代わりにフラグ スタイルの文字列を使用する場合はそうではありません'-production'
。) また、正確な文字列 'test' ではなく、't' で始まる文字列を OptionParser に検索させる方法はありません。
おそらく、OptionParser はその仕事に適したツールではありません。明らかに、ARGV を自分で分割するのは簡単なことです。私は、この行動で何が起こっているのか疑問に思っています。私はRuby 1.9.2を使用しています。