根据Trollop blog,版本2.0中的布尔选项将导致该选项被赋值true
或false
。该网站的一个例子:
E.g:
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?
。我可以做类似的事情:
{{1}}
但我不想。这将首先打败使用trollop的目的之一。
我做错了什么,或者它是trollop中的错误?
答案 0 :(得分:2)
似乎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
答案 1 :(得分:1)
我做错了。
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$