2012-03-06 30 views
19

Khi tôi chạy this sample từ tài liệu OptionParser:OptionParser trả về bool thay vì đối số?

require 'optparse' 
options = {} 
OptionParser.new do |opts| 
    opts.banner = "Usage: example.rb [options]" 
    opts.on("-v", "--[no-]verbose", "Run verbosely") do |v| 
     options[:verbose] = v 
    end 
end.parse! 
p options 
p ARGV 

và gõ: ruby test.rb -v 100, nó sẽ trả về:

{:verbose=>true} 
["100"] 

nên không tiết được 100, không phải là một boolean?

Tôi không biết gì về điều này, có ai có lời khuyên nào không?

+0

Khi tôi chạy phần tối thiểu từ liên kết với điều kiện nó đã tạo ra '{: verbose => true}' cũng như – ScottJShea

+2

'- [no] verbose' xác định rằng' verbose' là một công tắc boolean. –

Trả lời

48

Bạn đã chỉ định rằng tùy chọn -v không có một cuộc tranh cãi:

opts.on("-v", ... 

Nếu bạn muốn nó để có một cuộc tranh cãi sau đó bạn phải nói như vậy:

opts.on("-v n", "--verbose=n", ... 
#-----------^ 

Và nếu bạn muốn buộc n làm số nguyên, sau đó:

opts.on('-v n', '--verbose=n', OptionParser::DecimalInteger, ... 

Y Bạn muốn bắt đầu đọc tại các tài liệu make_switch (chẳng hạn như tài liệu) và sau đó thiết kế lại các ví dụ.

Không cảm thấy xấu về việc bị nhầm lẫn, tài liệu OptionParser không hoàn toàn là điều tốt nhất từ ​​trước tới nay.

+0

Tôi hiểu rồi .... tôi đã chane chương trình của mình. Và nó hoạt động. Cảm ơn rất nhiều . tôi sẽ đọc tài liệu make_switch. Cảm ơn ! – CrazyLion

Các vấn đề liên quan