2010-07-19 64 views
2

假設我有一個簡單的Ruby應用程序,我想要第一個參數(如果有的話)來指定環境:TEST,DEVELOPMENTPRODUCTION(如果沒有給出參數,則爲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上。

回答

0

我說你需要從ARGV運行OptionParser

如之前分析出這樣的論點

env = ARGV.select{|arg| arg =~ /dev/test/prod/i}.first 

P.S.我推薦Trollop。我覺得它更簡單,並且選擇默認值是很好的。

相關問題