假设我有一个简单的 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'
则不会。)而且我无法看到让 OptionParser 查找以 't' 开头的字符串,而不是确切的字符串 'test'。
也许 OptionParser 是不适合这项工作的工具。显然,自己拆分 ARGV 是微不足道的。我只是想知道这种行为是怎么回事。我在 Ruby 1.9.2 上。