Utilizarea OptionParser pentru a analiza comenzile din Ruby

În articolul care discută despre caracteristicile OptionParser am discutat câteva dintre motivele care fac ca utilizarea OptionParser în Ruby să fie preferabil să caute manual prin ARGV să analizezi comenzile manual. Acum a venit timpul să învățați cum să utilizați OptionParser și funcțiile sale.

Următorul cod al plăcii de cazan va fi utilizat pentru toate exemplele din acest tutorial. Pentru a încerca oricare dintre exemple, pur și simplu puneți exemplul opts.on bloc lângă comentariul TODO. Rularea programului va imprima starea opțiunilor are și ARGV, permițându-vă să examinați efectele comutatoarelor.

#! / usr / bin / env ruby
necesită „optparse”
necesită „pp”
# Acest hash va conține toate opțiunile
# parsed de la linia de comandă de
# OptionParser.
options =
optparse = OptionParser.new face | optează |
# TODO: Puneți aici opțiunile liniei de comandă
# 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!
pp "Opțiuni:", opțiuni
pp "ARGV:", ARGV

Comutator simplu

Un comutator simplu este un argument fără formulare opționale sau fără parametri. Efectul va fi să setați pur și simplu un steag în hash-ul de opțiuni. Niciun alt parametru nu va fi trecut la pe metodă.

options [: simple] = false
opts.on ('-s', '--simple', "Argument simplu") fac
options [: simple] = true
Sfârșit

Comutați cu parametrul obligatoriu

Comutatoarele care iau un parametru trebuie doar să menționeze numele parametrului în forma lungă a comutatorului. De exemplu, "-f", "--file FILE" înseamnă că comutatorul -f sau --file ia un singur parametru numit FILE, iar acest parametru este obligatoriu. Nu puteți utiliza fie -f fie - fișier fără a-i trece, de asemenea, un parametru.

options [: mand] = ""
opts.on ('-m', '- FILE obligatoriu', 'Argument obligatoriu') do | f |
opțiuni [: mand]] = f
Sfârșit

Comutați cu parametrul opțional

Parametrii comutatorului nu trebuie să fie obligatorii, ei pot fi opționali. Pentru a declara opțional un parametru de comutare, introduceți numele acestuia între paranteze în descrierea comutatorului. De exemplu, "--logfile [FILE]" înseamnă că parametrul FILE este opțional. Dacă nu este furnizat, programul va asuma o valoare implicită, cum ar fi un fișier numit log.txt.

În exemplu, idila a = b || c este folosit. Aceasta este doar scurtă pentru "a = b, dar dacă b este fals sau nul, a = c".

options [: opt] = false
opts.on ('-o', '--optional [OPT]', "Argument opțional") do | f |
options [: opt] = f || "nimic"
Sfârșit

Convertiți automat în Float

OptionParser poate converti automat argumentul în anumite tipuri. Unul dintre aceste tipuri este Float. Pentru a converti automat argumentele la un comutator la Float, treceți Float la pe metoda după șirurile de descriere a comutatorului.

Conversiile automate sunt utile. Nu numai că te salvează pasul de conversie a șirului la tipul dorit, ci verifică și formatul pentru tine și va arunca o excepție dacă este formatată incorect.

opțiuni [: float] = 0,0
opts.on ('-f', '--float NUM', Float, "Convertiți în plutitor") do | f |
opțiuni [: float] = f
Sfârșit

Unele alte tipuri pe care OptionParser le poate converti pentru a include automat Time and Integer.

Liste de argumente

Argumentele pot fi interpretate ca liste. Aceasta poate fi văzută ca o conversie într-un tablou, pe măsură ce ați convertit în Float. În timp ce șirul de opțiuni poate defini parametrul care va fi numit „a, b, c”, OptionParser va permite orbește orice număr de elemente din listă. Deci, dacă aveți nevoie de un număr specific de elemente, asigurați-vă că verificați singur lungimea tabloului.

options [: list] = []
opts.on ('-l', '--list a, b, c', Array, "Lista parametrilor") do | l |
options [: list] = l
Sfârșit

Set de argumente

Uneori, are sens să restricționați argumentele la trecerea la câteva opțiuni. De exemplu, următorul comutator va lua doar un singur parametru obligatoriu, iar parametrul trebuie să fie unul dintre da, Nu sau poate. Dacă parametrul este altceva, se va arunca o excepție.

Pentru a face acest lucru, treceți o listă de parametri acceptabili ca simboluri după șirurile descrierii comutatorului.

options [: set] =: da
opts.on ('-s', '--set OPT', [: da,: nu,: poate], "Parametri dintr-un set") do | s |
options [: set] = s
Sfârșit

Formulare negatate

Comutatoarele pot avea o formă negată. Schimbarea --negata poate avea unul care face efectul opus, numit --no-negata. Pentru a descrie acest lucru în șirul de descriere a comutatorului, plasați porțiunea alternativă între paranteze: --[No-] negata. Dacă se întâlnește primul formular, true va fi trecut la bloc, iar false vor fi blocate dacă este întâlnit al doilea formular.

options [: neg] = false
opts.on ('-n', '- [nu-] negat', "Forme negate") do | n |
opțiuni [: neg] = n
Sfârșit