OptionParseri käsurida võimaldab Ruby Way

Ruby on varustatud võimsa ja paindliku tööriistaga käsuridade valikute sõelumiseks - OptionParser. Kui olete selle kasutamise selgeks õppinud, ei lähe te kunagi tagasi ARGV käsitsi otsimise juurde. OptionParseril on mitmeid funktsioone, mis muudavad selle Ruby programmeerijatele üsna huvipakkuvaks. Kui olete kunagi valikuid käsitsi sõelunud Ruby või C-ga või klahviga getoptlong C funktsiooni näete, kui tervitavad mõnda neist muudatustest.

  • OptionParser on KUIV. Peate oma skripti kirjutama ainult üks kord käsuridade lüliti, selle argumendid, koodi, mida käivitatakse, kui see ilmneb, ja käsuridade lüliti kirjelduse. OptionParser genereerib sellest kirjeldusest teile automaatselt abiekraanid ja järeldab kõik argumendi kirjelduse põhjal. Näiteks saab ta teada --fail [Fail] variant on valikuline ja võtab ühe argumendi. Samuti saab ta sellest teada - [- ei] -verboos on tõesti kaks võimalust ja aktsepteerib mõlemat vormi.
  • OptionParser teisendab suvandid automaatselt konkreetsesse klassi. Kui suvand võtab täisarvu, saab see teisendada käsuridadel edastatud stringi täisarvuks. Sellega kärbitakse teatavat tüütlust, mis on seotud käsuridade valikute parsimisega.
    instagram viewer
  • Kõik on väga suletud. Kõik valikud asuvad samas kohas ja valiku mõju on selle valiku kõrval üsna õige. Kui valikuid tuleb lisada, muuta või kui keegi soovib lihtsalt näha, mida nad teevad, on ainult üks koht, kust otsida. Kui käsurida on parsitud, hoiab tulemusi üksainus räpp või OpenStruct.

Aitab juba, näita mulle koodi

Nii et siin on lihtne näide kasutamise kohta OptionParser. See ei kasuta ühtegi lisafunktsiooni, vaid põhitõdesid. Võimalusi on kolm ja üks neist võtab parameetri. Kõik valikud on kohustuslikud. Seal on -v / - paljusõnaline ja -q / - kiire valikuid, aga ka -l / - logifaili Fail valik. Lisaks võtab skript failide loendi, mis ei sõltu suvanditest.

 #! / usr / bin / env rubiin

 # Skript, mis eeldab paljude piltide suuruse muutmist

 nõuda 'optparse'


 # See räsi sisaldab kõiki võimalusi

 # parsitud käsurealt poolt

 # OptionParser.

 võimalused = {}


 optparse = OptionParser.new tegema | valib |

 # Valige ülaosas kuvatav riba

 # abiekraani.

 opts.banner = "Kasutamine: optparse1.rb [suvandid] fail1 fail2 ..."


 # Määratlege valikud ja nende toimingud

 suvandid [: paljusõnaline] = vale

 opts.on ('-v', '--verbose', 'Lisateabe edastamine') teevad

 võimalused [: paljusõnaline] = tõene

 lõpp


 suvandid [: kiire] = vale

 opts.on ('-q', '--quick', 'Soorita ülesanne kiiresti') teha

 suvandid [: kiire] = tõene

 lõpp


 suvandid [: logfile] = null

 opts.on ('-l', '--logfile FILE', 'Kirjuta logi faili') tegema | fail |

 suvandid [: logfile] = fail

 lõpp


 # Kuvatakse abiekraan, kõik programmid on

 # eeldatakse, et see võimalus on olemas.

 opts.on ('-h', '--help', 'Kuva see ekraan') teevad

 paneb valikud

 väljumine

 lõpp

 lõpp


 # Sõeluge käsurida. Pidage meeles, et on kaks vormi

 # parsimismeetodi kohta. Protsessimeetod lihtsalt sõelub

 # ARGV, samal ajal kui 'parsida!' meetod parsib ARGV ja eemaldab

 # kõik seal leiduvad valikud ja parameetrid

 # valikud. Alles on failide loend, mille suurust muuta.

 optparse.parse!


 lisab valiku "Verbose", kui valikud [: verbose]

 paneb valiku "Kiireks", kui valikud [: kiire]

 paneb "Logimine faili # {options [: logfile]}", kui suvandid [: logfile]


 ARGV.each do | f |

 paneb pildi "suuruse nr {f} ...

 magama 0,5

 lõpp

Koodi uurimine

Alustuseks optparse raamatukogu on vajalik. Pidage meeles, et see pole a kalliskivi. Kaasas Ruby, nii et pole vaja kalliskive installida ega nõuda rubügeemid enne optparse.

Selles skriptis on kaks huvitavat objekti. Esimene on võimalusi, kuulutatud kõige ulatuslikumaks. See on lihtne tühi räsi. Kui suvandid on määratletud, kirjutavad nad sellele räsile vaikeväärtused. Näiteks on selle skripti vaikekäitumine mitte ole paljusõnaline, nii valikud [: paljusõnaline] on seatud valele. Kui käsureal leidub suvandeid, muudavad nad väärtusi võimalusi nende mõju kajastamiseks. Näiteks kui -v / - paljusõnaline ilmneb, siis omistatakse sellele tõene valikud [: paljusõnaline].

Teine huvitav objekt on optparse. See on OptionParser objekt ise. Selle objekti konstrueerimisel annate selle üle ploki. Seda plokki käitatakse ehituse ajal ja see loob sisemistes andmestruktuurides olevate valikute loendi ja valmis on kõike parsida. Selles mahus juhtub kogu maagia. Siin määratlete kõik valikud.

Valikute määratlemine

Kõik valikud järgivad sama mustrit. Esmalt kirjutate räsi vaikimisi väärtuse. See juhtub kohe, kui OptionParser on ehitatud. Järgmisena helistate pealmeetod, mis määratleb valiku ise. Sellel meetodil on mitu vormi, kuid siin kasutatakse ainult ühte. Muud vormid võimaldavad teil määratleda automaatseid tüüpi teisendusi ja väärtuste komplekte, mille puhul suvand on piiratud. Kolm siin kasutatud argumenti on lühivorm, pikk vorm ja valiku kirjeldus.

peal meetod järeldab pikast vormist mitmeid asju. Üks asi on järeldada on mis tahes parameetrite olemasolu. Kui valikul on mõni parameeter, edastab see parameetrina plokile.

Kui seda käsureal leidub, läks plokk üle peal meetodit juhitakse. Siin ei tee plokid palju, nad määravad väärtused lihtsalt räsi abil. Veel saaks ära teha, näiteks kontrollida, kas viidatud fail on olemas jne. Vigade korral võib nendest plokkidest erandeid teha.

Lõpuks parsitakse käsurida. See juhtub helistades parsida! meetodil OptionParser objekt. Sellel meetodil on tegelikult kaks vormi, parsida ja parsida!. Nagu hüüumärgiga versioon vihjab, on see hävitav. See mitte ainult ei käsurida käsurida, vaid eemaldab ka kõik sealt leitavad suvandid ARGV. See on oluline asi, see jätab alles pärast failide jaotises toodud failide loendit ARGV.