Ruby vine echipat cu un instrument puternic și flexibil pentru a analiza opțiunile din linia de comandă, OptionParser. După ce înveți cum să folosești acest lucru, nu te vei întoarce niciodată să analizezi manual ARGV. OptionParser are o serie de funcții care îl fac destul de atrăgător pentru programatorii Ruby. Dacă ați analizat vreodată opțiunile de mână în Ruby sau C sau cu getoptlong Funcția C, veți vedea cât de binevenite sunt unele dintre aceste modificări.
Iată un exemplu simplu de utilizare OptionParser. Nu folosește nicio caracteristică avansată, ci doar elementele de bază. Există trei opțiuni, iar una dintre ele ia un parametru. Toate opțiunile sunt obligatorii. Există -v / - verbose și -q / - rapid opțiuni, precum și -l / - fișier de fișier opțiune. În plus, scriptul ia o listă de fișiere independente de opțiuni.
#! / usr / bin / env ruby
# Un script care se va preface redimensionarea unui număr de imagini
necesită „optparse”
# Acest hash va conține toate opțiunile
# parsed de la linia de comandă de
# OptionParser.
options =
optparse = OptionParser.new face | optează |
# Setați un banner, afișat în partea de sus
# a ecranului de ajutor.
opts.banner = "Utilizare: optparse1.rb [opțiuni] file1 file2 ..."
# Definiți opțiunile și ce fac
options [: verbose] = false
opts.on ('-v', '--verbose', 'Output more information') fac
options [: verbose] = true
Sfârșit
options [: rapid] = false
opts.on ('-q', '--quick', 'Efectuați sarcina rapid') faceți
options [: rapid] = true
Sfârșit
options [: logfile] = nil
opts.on ('-l', '--logfile FILE', 'Scrieți jurnalul în FILE') do | fișier |
options [: logfile] = fișier
Sfârșit
# Acesta afișează ecranul de ajutor, toate programele sunt
# presupus că are această opțiune.
opts.on ('-h', '--help', 'Afișează acest ecran')
pune opțiuni
Ieșire
Sfârșit
Sfârșit
# Analizați linia de comandă. Amintiți-vă că există două forme
# a metodei parse. Metoda „parse” pur și simplu analizează
# ARGV, în timp ce „parse!” metoda analizează ARGV și elimină
# orice opțiuni găsite acolo, precum și orice parametri pentru
# opțiunile. Ceea ce a mai rămas este lista de fișiere de redimensionat.
optparse.parse!
pune „A fi verbos” dacă opțiuni [: verbose]
pune „A fi rapid” dacă opțiunile [: rapid]
pune „Logging to file # options [: logfile]” if options [: logfile]
ARGV.each do | f |
pune „Redimensionarea imaginii # f…”
somn 0,5
Sfârșit
Pentru a începe cu, optparse biblioteca este necesară. Nu uitați, nu este o bijuterie. Vine cu Ruby, deci nu este nevoie să instalați o bijuterie sau să solicitați rubygems inainte de optparse.
În acest script există două obiecte interesante. Primul este Opțiuni, declarată în domeniul de vârf. Este un simplu hash gol. Când sunt definite opțiunile, acestea își scriu valorile implicite în acest hash. De exemplu, comportamentul implicit este pentru acest script nu fiți verbose, deci opțiuni [: verbose] este setat pe fals. Când opțiunile sunt întâlnite pe linia de comandă, acestea vor schimba valorile în Opțiuni să reflecte efectul lor. De exemplu, când -v / - verbose este întâlnit, acesta va atribui true la opțiuni [: verbose].
Al doilea obiect interesant este optparse. Acesta este OptionParser obiectul în sine. Când construiți acest obiect, îl transmiteți un bloc. Acest bloc este executat în timpul construcției și va construi o listă de opțiuni în structurile de date interne și va fi pregătit să analizeze totul. În acest bloc se întâmplă toată magia. Definiți toate opțiunile aici.
Fiecare opțiune urmează același tipar. Mai întâi scrieți valoarea implicită în hash. Acest lucru se va întâmpla imediat ce OptionParser este construit. În continuare, apelați pe metoda, care definește opțiunea în sine. Există mai multe forme ale acestei metode, dar aici se folosește doar una. Celelalte forme vă permit să definiți conversii automate de tip și seturi de valori la care este restricționată o opțiune. Cele trei argumente utilizate aici sunt forma scurtă, forma lungă și descrierea opțiunii.
pe metoda va deduce o serie de lucruri din forma lungă. Un lucru este să deducem este prezența oricăror parametri. Dacă există parametri prezenți în opțiune, îi va trece ca parametri la bloc.
Dacă opțiunea este întâlnită pe linia de comandă, blocul a trecut la pe metoda este rulată. Aici, blocurile nu fac mare lucru, doar setează valori în hash-ul de opțiuni. S-ar putea face mai multe, cum ar fi verificarea existenței unui fișier la care se face referire, etc. Dacă există erori, se pot trimite excepții de la aceste blocuri.
În cele din urmă, linia de comandă este analizată. Acest lucru se întâmplă prin apelarea analiza! metoda de pe un OptionParser obiect. Există de fapt două forme ale acestei metode, analiza și analiza!. După cum implică versiunea cu punctul de exclamare, aceasta este distructivă. Nu numai că analizează linia de comandă, dar va elimina orice opțiune găsită argv. Acest lucru este important, acesta va lăsa doar lista de fișiere furnizate după opțiunile din argv.