En el artículo que analiza las características de OptionParser, discutimos algunas de las razones que hacen que usar OptionParser en Ruby sea preferible a mirar a través de ARGV manualmente para analizar los comandos a mano. Ahora es el momento de aprender a usar OptionParser y sus funciones..
El siguiente código repetitivo se utilizará para todos los ejemplos en este tutorial. Para probar cualquiera de los ejemplos, simplemente ponga los ejemplos opts.on bloque al lado del comentario TODO. La ejecución del programa imprimirá el estado de las opciones que tiene y ARGV, lo que le permite examinar los efectos de sus interruptores.
#! / usr / bin / env ruby
requiere 'optparse'
requiere 'pp'
# Este hash contendrá todas las opciones
# analizado desde la línea de comandos por
# OptionParser.
opciones =
optparse = OptionParser.new do | opts |
# TODO: Pon aquí las opciones de línea de comandos
# Esto muestra la pantalla de ayuda, todos los programas son
# se supone que tiene esta opción.
opts.on ('-h', '--help', 'Mostrar esta pantalla') do
pone opta
salida
final
final
# Analiza la línea de comandos. Recuerda que hay dos formas
# del método de análisis. El método 'analizar' simplemente analiza
# ARGV, mientras que el "análisis!" El método analiza ARGV y elimina
# cualquier opción encontrada allí, así como cualquier parámetro para
# las opciones. Lo que queda es la lista de archivos para cambiar el tamaño.
optparse.parse!
pp "Opciones:", opciones
pp "ARGV:", ARGV
Un cambio simple es un argumento sin formas opcionales o sin parámetros. El efecto será simplemente establecer una bandera en el hash de opciones. No se pasarán otros parámetros al en método.
opciones [: simple] = falso
opts.on ('-s', '--simple', "Argumento simple") do
opciones [: simple] = verdadero
final
Los conmutadores que toman un parámetro solo necesitan indicar el nombre del parámetro en la forma larga del conmutador. Por ejemplo, "-f", "--archivo ARCHIVO" significa que el modificador -f o --file toma un solo parámetro llamado FILE, y este parámetro es obligatorio. No puede usar -f o --file sin pasarle también un parámetro.
opciones [: mand] = ""
opts.on ('-m', '- ARCHIVO obligatorio', "Argumento obligatorio") do | f |
opciones [: mand] = f
final
Los parámetros de cambio no tienen que ser obligatorios, pueden ser opcionales. Para declarar un parámetro de interruptor opcional, coloque su nombre entre paréntesis en la descripción del interruptor. Por ejemplo, "--logfile [ARCHIVO]" significa que el parámetro FILE es opcional. Si no se proporciona, el programa asumirá un valor predeterminado correcto, como un archivo llamado log.txt.
En el ejemplo, el idioma a = b || C es usado Esto es solo una forma abreviada de "a = b, pero si b es falso o nulo, a = c".
opciones [: opt] = falso
opts.on ('-o', '--opcional [OPT]', "Argumento opcional") do | f |
opciones [: opt] = f || "nada"
final
OptionParser puede convertir automáticamente argumentos a algunos tipos. Uno de estos tipos es Float. Para convertir automáticamente sus argumentos a un cambio a Float, pase Float a en método después de las cadenas de descripción del conmutador.
Las conversiones automáticas son útiles. No solo le ahorran el paso de convertir la cadena al tipo deseado, sino que también comprueban el formato y generarán una excepción si está formateado incorrectamente.
opciones [: flotante] = 0.0
opts.on ('-f', '--float NUM', Float, "Convertir a flotante") do | f |
opciones [: flotante] = f
final
Algunos otros tipos que OptionParser puede convertir automáticamente incluyen Time e Integer.
Los argumentos pueden interpretarse como listas. Esto puede verse como una conversión a una matriz, como lo hizo a Float. Si bien su cadena de opciones puede definir el parámetro que se llamará "a, b, c", OptionParser permitirá ciegamente cualquier número de elementos en la lista. Entonces, si necesita un número específico de elementos, asegúrese de verificar la longitud de la matriz usted mismo.
opciones [: lista] = []
opts.on ('-l', '--list a, b, c', Array, "Lista de parámetros") do | l |
opciones [: lista] = l
final
A veces tiene sentido restringir los argumentos a un cambio a unas pocas opciones. Por ejemplo, el siguiente modificador solo tomará un único parámetro obligatorio, y el parámetro debe ser uno de si, No o tal vez. Si el parámetro es cualquier otra cosa, se lanzará una excepción.
Para hacer esto, pase una lista de parámetros aceptables como símbolos después de las cadenas de descripción del interruptor.
opciones [: set] =: sí
opts.on ('-s', '--set OPT', [: yes,: no,: maybe], "Parámetros de un conjunto") do | s |
opciones [: set] = s
final
Los interruptores pueden tener una forma negada. El interruptor --negado puede tener uno que haga el efecto contrario, llamado --no negado. Para describir esto en la cadena de descripción del interruptor, coloque la porción alternativa entre paréntesis: --[no] negado. Si se encuentra el primer formulario, verdadero se pasará al bloque y falso se bloqueará si se encuentra el segundo formulario.
opciones [: neg] = falso
opts.on ('-n', '- [no-] negated', "Formas negadas") do | n |
opciones [: neg] = n
final