假設我有一個簡單的Ruby應用程序,我想要第一個參數(如果有的話)來指定環境:TEST
,DEVELOPMENT
或PRODUCTION
(如果沒有給出參數,則爲DEVELOPMENT
爲默認值)。例如,我可以使用Ruby的OptionParser接受任意參數模式嗎?
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'
這樣的標誌樣式的字符串,則不會出現這種情況。)我無法看到OptionParser查找以't'開頭的字符串,而不是確切的字符串'test'。
也許OptionParser是這項工作的錯誤工具。顯然,自己分開ARGV是微不足道的。我只是想知道這是怎麼回事。我在Ruby 1.9.2上。