根据手推车博客,2.0版本中的布尔选项将导致将该选项分配给值true或false。该网站的一个例子是:
例如:
opt :magic, "Use magic", :default => true使用
--magic将导致:magic => true,而--no-magic将导致:magic => false,而不使用两者都将导致:magic => true。
我们来验证一下。
jdibling@hurricane:~/dev/ruby/decoder$ cat hacks2.rb
#!/usr/bin/env ruby
require 'trollop'
options = Trollop::options do
banner "tester for trollop"
opt :magic, "Use magic", :default => true
end
puts "Args: #{ARGV}\nMagic: #{options.magic} (#{options.magic.class})"
jdibling@hurricane:~/dev/ruby/decoder$ ruby --version
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
jdibling@hurricane:~/dev/ruby/decoder$ gem list --local
*** LOCAL GEMS ***
gli (1.3.0)
trollop (2.0)
jdibling@hurricane:~/dev/ruby/decoder$ ./hacks2.rb
Args: []
Magic: true (TrueClass)
jdibling@hurricane:~/dev/ruby/decoder$ ./hacks2.rb --magic
Args: []
Magic: true (TrueClass)
jdibling@hurricane:~/dev/ruby/decoder$ ./hacks2.rb --no-magic
Args: []
Magic: (NilClass)
jdibling@hurricane:~/dev/ruby/decoder$ 使用--no-magic不会导致:magic => false。我可以做这样的事情:
options.magic = false if options.magic.nil?但我不想。这将首先挫败使用trollop的目的之一。
我是不是做错了什么,还是在手推车里出了问题?
发布于 2014-02-13 20:57:16
Trollop似乎以散列的形式返回选项。这似乎是可行的:
require 'trollop'
options = Trollop::options do
banner "tester for trollop"
opt :magic, "Use magic", :default => true
end
puts "Args: #{ARGV}\nMagic: #{options.magic} (#{options.magic.class})"
puts "Inspecting options: #{options.inspect}"
puts "#{options[:magic]}"返回:
Args:
Magic: (NilClass)
Inspecting options: {:help=>false, :magic=>false, :magic_given=>true}
false发布于 2014-02-13 20:54:07
我做错了。
options,这里是Hash。我访问它时,就好像magic是options的成员一样。
我应该做的是options[:magic],而不是options.magic。
例如:
#!/usr/bin/env ruby
require 'trollop'
options = Trollop::options do
banner "tester for trollop"
opt :magic, "Use magic", :default => true
end
# options.magic = false if options.magic.nil?
puts "Args: #{ARGV}\nMagic: #{options[:magic]} (#{options[:magic].class}) nil? #{options[:magic].class.nil?}"现在,它正常工作(或者更确切地说,我正在使用它):
jdibling@hurricane:~/dev/ruby/decoder$ ./hacks2.rb --no-magic
Args: []
Magic: false (FalseClass) nil? false
jdibling@hurricane:~/dev/ruby/decoder$ https://stackoverflow.com/questions/21764836
复制相似问题