2012-03-06 19 views
19

Kiedy biegnę this sample z dokumentacji OptionParser:OptionParser zwracający bool zamiast argumentu?

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 

i typ: ruby test.rb -v 100, zwraca:

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

nie powinno być 100 gadatliwy, a nie logiczna?

Nie mam pojęcia o tym, czy ktoś ma jakieś rady?

+0

Kiedy uruchomiłem sekcję minimal z linku pod warunkiem, że wyprodukowano '{: verbose => true}' oraz – ScottJShea

+2

'- [no] verbose' określa, że' verbose' jest przełącznikiem boolowskim. –

Odpowiedz

48

pan określił, że opcja -v nie ma argument:

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

Jeśli chcesz go przyjąć argumentu to trzeba powiedzieć tak:

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

a jeśli aby wymusić n być liczbą całkowitą, a następnie:

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

Y Chcesz zacząć czytać na dokumentach (takich jak jest), a następnie odtwarzać przykłady.

Nie czuj się źle z powodu pomyłki, dokumentacja OptionParser nie jest najlepszą rzeczą w historii.

+0

Mam to .... ja chane mój program. i to działa. Wielkie dzięki . Pójdę do zapoznania się z dokumentami make_switch. Dzięki ! – CrazyLion

Powiązane problemy