2012-03-06 12 views
19

Cuando corro this sample de la documentación OptionParser:OptionParser devolviendo bool en lugar de argumento?

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 

y tipo: ruby test.rb -v 100, devuelve:

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

¿No debería ser detallado 100, no un valor lógico?

No tengo idea de esto, ¿alguien tiene algún consejo?

+0

Cuando ejecuté la sección mínima del enlace provisto, produjo '{: verbose => true}' así como – ScottJShea

+2

'- [no] verbose' especifica que' verbose' es un modificador booleano. –

Respuesta

48

Usted ha especificado que la opción -v no tiene un argumento:

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

Si usted quiere que tome un argumento entonces usted tiene que decirlo:

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

Y si querer forzar n a ser un número entero, entonces:

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

Y Desea comenzar a leer en los documentos make_switch (tal como están) y luego realice ingeniería inversa en los ejemplos.

No te sientas mal por la confusión, la documentación de OptionParser no es lo mejor que hayas visto.

+0

lo tengo .... yo chane mi programa. y funciona. Muchas gracias . Iré a leer los documentos make_switch. Gracias ! – CrazyLion

Cuestiones relacionadas