Ruby è dotato di uno strumento potente e flessibile per analizzare le opzioni della riga di comando, OptionParser. Una volta che hai imparato come usarlo, non tornerai più a guardare manualmente ARGV. OptionParser ha una serie di funzionalità che lo rendono abbastanza attraente per i programmatori Ruby. Se hai mai analizzato le opzioni a mano in Ruby o C, o con il getoptlong Funzione C, vedrai quanto sono graditi alcuni di questi cambiamenti.
Quindi ecco un semplice esempio di come usare OptionParser. Non utilizza nessuna delle funzionalità avanzate, solo le basi. Esistono tre opzioni e una di esse accetta un parametro. Tutte le opzioni sono obbligatorie. Ci sono i -v / - verbose e -q / - veloce opzioni, così come il -l / - file di registro FILE opzione. Inoltre, lo script prende un elenco di file indipendenti dalle opzioni.
#! / usr / bin / env ruby
# Una sceneggiatura che farà finta di ridimensionare un numero di immagini
richiede 'optparse'
# Questo hash conterrà tutte le opzioni
# analizzato dalla riga di comando da
# OptionParser.
opzioni =
optparse = OptionParser.new do | opts |
# Imposta un banner, visualizzato in alto
# della schermata di aiuto.
opts.banner = "Uso: optparse1.rb [opzioni] file1 file2 ..."
# Definisci le opzioni e cosa fanno
opzioni [: verbose] = false
opts.on ('-v', '--verbose', 'Output maggiori informazioni') do
options [: verbose] = true
fine
opzioni [: veloce] = falso
opts.on ('-q', '--quick', 'Esegui rapidamente l'attività')
opzioni [: veloce] = vero
fine
opzioni [: logfile] = zero
opts.on ('-l', '--logfile FILE', 'Scrivi registro su FILE') do | file |
opzioni [: logfile] = file
fine
# Questo visualizza la schermata di aiuto, tutti i programmi lo sono
# si presume che abbia questa opzione.
opts.on ('-h', '--help', 'Visualizza questa schermata')
mette opts
Uscita
fine
fine
# Analizza la riga di comando. Ricorda che ci sono due forme
# del metodo di analisi. Il metodo 'parse' analizza semplicemente
# ARGV, mentre "analizza!" il metodo analizza l'ARGV e lo rimuove
# qualsiasi opzione trovata lì, così come qualsiasi parametro per
# le opzioni. Ciò che resta è l'elenco dei file da ridimensionare.
optparse.parse!
mette "Essere prolisso" se opzioni [: verboso]
mette "Essere veloci" se le opzioni [: veloce]
inserisce "Registrazione nel file # options [: logfile]" se options [: logfile]
ARGV.each do | f |
mette "Ridimensionamento dell'immagine # f ..."
dormire 0,5
fine
Per cominciare, il optparse è richiesta la biblioteca. Ricorda, questa non è una gemma. Viene fornito con Ruby, quindi non è necessario installare una gemma o richiedere RubyGems prima optparse.
Ci sono due oggetti interessanti in questo script. Il primo è opzioni, dichiarato nell'ambito più elevato. È un semplice hash vuoto. Quando le opzioni sono definite, scrivono i loro valori predefiniti in questo hash. Ad esempio, il comportamento predefinito è per questo script non sii prolisso, quindi [opzioni: verbose] è impostato su falso. Quando si incontrano opzioni sulla riga di comando, cambieranno i valori in opzioni per riflettere il loro effetto. Ad esempio, quando -v / - verbose viene rilevato, assegnerà true a [opzioni: verbose].
Il secondo oggetto interessante è optparse. Questo è il OptionParser oggetto stesso. Quando costruisci questo oggetto, gli passi un blocco. Questo blocco viene eseguito durante la costruzione e crea un elenco di opzioni nelle strutture di dati interne e si prepara a analizzare tutto. È in questo blocco che accade tutta la magia. Definisci tutte le opzioni qui.
Ogni opzione segue lo stesso modello. Prima scrivi il valore predefinito nell'hash. Questo accadrà non appena il OptionParser è costruito. Successivamente, si chiama il su metodo, che definisce l'opzione stessa. Esistono diverse forme di questo metodo, ma qui ne viene utilizzata solo una. Gli altri moduli consentono di definire conversioni di tipo automatiche e insiemi di valori a cui è limitata un'opzione. I tre argomenti utilizzati qui sono la forma abbreviata, la forma lunga e la descrizione dell'opzione.
Il su Il metodo inferirà un numero di cose dalla forma lunga. Una cosa è inferirà è la presenza di eventuali parametri. Se sono presenti parametri sull'opzione, li passerà come parametri al blocco.
Se l'opzione viene rilevata sulla riga di comando, il blocco viene passato a su viene eseguito il metodo Qui, i blocchi non fanno molto, semplicemente impostano i valori nell'hash delle opzioni. Si potrebbe fare di più, come verificare l'esistenza di un file a cui si fa riferimento, ecc. In caso di errori, è possibile generare eccezioni da questi blocchi.
Infine, viene analizzata la riga di comando. Questo accade chiamando il parse! metodo su un OptionParser oggetto. Esistono in realtà due forme di questo metodo, parse e parse!. Come implica la versione con il punto esclamativo, è distruttiva. Non solo analizza la riga di comando, ma rimuoverà qualsiasi opzione trovata da ARGV. Questa è una cosa importante, lascerà solo l'elenco dei file forniti dopo le opzioni in ARGV.