Ruby je opremljen z zmogljivim in prilagodljivim orodjem za razčlenitev možnosti ukazne vrstice, OptionParser. Ko se enkrat naučite, kako to uporabljati, ne boste nikoli več ročno pogledali ARGV. OptionParser ima številne funkcije, zaradi katerih je Ruby programerjem zelo všeč. Če ste kdaj ročno razčlenili možnosti v Ruby ali C ali z getoptlong C funkcija, videli boste, kako so nekatere od teh sprememb dobrodošle.
- OptionParser je SUHO. V svoj skript morate samo enkrat vnesti stikalo ukazne vrstice, njene argumente, kodo, ki jo želite zagnati, in opis stikala ukazne vrstice. OptionParser bo za vas samodejno ustvaril zaslone za pomoč iz tega opisa in izvedel vse o argumentu iz njegovega opisa. Na primer, vedel bo --file [FILE] možnost ni obvezna in ima en argument. Tudi to bo vedel - [- ne] -verboza je res dve možnosti in bosta sprejela oba obrazca.
- OptionParser samodejno pretvori možnosti v določen razred. Če ima možnost celo število, lahko kateri koli niz, ki je poslan v ukazni vrstici, pretvori v celo število. To zmanjšuje nekatere vrste, ki so vključene v razčlenitev možnosti ukazne vrstice.
- Vse je zelo vsebovano. Vse možnosti so na istem mestu in učinek možnosti je ob bok opredelitvi možnosti. Če je treba dodati, spremeniti možnosti ali kdo hoče videti, kaj počnejo, je videti le eno mesto. Ko je ukazna vrstica razčlenjena, bo rezultat zadržal en Hash ali OpenStruct.
Dovolj že, Pokaži mi nekaj kode
Torej, tukaj je preprost primer uporabe OptionParser. Ne uporablja nobene napredne funkcije, temveč samo osnove. Obstajajo tri možnosti in ena od njih sprejme parameter. Vse možnosti so obvezne. Obstajajo -v / - besedno in -q / - hitro možnosti, kot tudi -l / - logfile DATOTEK možnost. Poleg tega skript sprejme seznam datotek, ki niso odvisne od možnosti.
#! / usr / bin / env rubin
# Skript, ki se bo pretvarjal, da bo spremenil velikost slik
zahtevajo 'optparse'
# Ta hash vsebuje vse možnosti
# razčlenil v ukazni vrstici
# OptionParser.
možnosti = {}
optparse = OptionParser.new do | opts |
# Nastavite pasico, prikazano na vrhu
# zaslona pomoči.
opts.banner = "Uporaba: optparse1.rb [možnosti] file1 file2 ..."
# Določite možnosti in kaj počnejo
možnosti [: verbose] = napačno
opts.on ('-v', '--verbose', 'Pošlji več informacij')
možnosti [: verbose] = res
konec
možnosti [: hitro] = napačno
opts.on ('-q', '--quick', 'Nalogo hitro izvedem')
možnosti [: hitro] = res
konec
možnosti [: logfile] = nič
opts.on ('-l', '--logfile FILE', 'Write log to FILE') datoteko |
možnosti [: logfile] = datoteka
konec
# Prikaže se zaslon pomoči, vsi programi so
# domneva, da ima to možnost.
opts.on ('-h', '--help', 'Prikaži ta zaslon')
daje opts
izhod
konec
konec
# Razčleni ukazno vrstico. Ne pozabite, da obstajata dve obliki
# metode razčlenitve. Metoda "razčlenitev" preprosto razčleni
# ARGV, medtem ko je 'razčleniti!' metoda razčleni ARGV in odstrani
# katere koli možnosti, ki jih najdete tam, pa tudi vse parametre za
# možnosti. Preostali je seznam datotek za spreminjanje velikosti.
optparse.parse!
postavi "Biti verbose", če možnosti [: verbose]
postavi "Hitro", če možnosti [: hitro]
postavi "Prijava v datoteko # {options [: logfile]}", če možnosti [: logfile]
ARGV.each do | f |
postavi "Velikost slike # {f} ..."
spanja 0,5
konec
Preučitev kodeksa
Za začetek s optparse knjižnica je potrebna. Ne pozabite, to ni dragulj. Priložen je Ruby, zato ni treba namestiti dragulja ali ga zahtevati rubini prej optparse.
V tem scenariju sta dva zanimiva predmeta. Prva je opcije, razglašen na najvišjem mestu. Preprosta prazna hašiš. Ko so definirane možnosti, v ta hash zapišejo privzete vrednosti. Na primer, privzeto vedenje je za to skript ne bodi dobeseden, torej možnosti [: verbose] je nastavljeno na false. Ko se v ukazni vrstici srečajo možnosti, bodo vrednosti spremenjene v opcije da odraža njihov učinek. Na primer, kdaj -v / - besedno v tem primeru bo dodeljena resnici možnosti [: verbose].
Drugi zanimiv predmet je optparse. To je OptionParser objekt sam. Ko konstruirate ta objekt, mu pošljete blok. Ta blok se izvaja med gradnjo in bo sestavil seznam možnosti v notranjih podatkovnih strukturah ter se pripravil na vse razčleniti. V tem bloku se dogajajo vse čarovnije. Tu definirate vse možnosti.
Opredelitev možnosti
Vsaka možnost sledi enakemu vzorcu. Najprej napišete privzeto vrednost v hash. To se bo zgodilo takoj, ko bo OptionParser je zgrajena. Nato pokličete naprejmetoda, ki sam definira možnost. Obstaja več oblik te metode, vendar se tukaj uporablja samo ena. Drugi obrazci vam omogočajo, da določite samodejne pretvorbe in vrste vrednosti, na katere je možnost omejena. Tu so uporabljeni trije argumenti: kratka oblika, dolga oblika in opis možnosti.
The naprej metoda bo sklepala na številne stvari iz dolge forme. Ena stvar je, da lahko sklepamo o prisotnosti kakršnih koli parametrov. Če so v opciji prisotni kakršni koli parametri, jih bo kot parametre posredoval bloku.
Če se v ukazni vrstici pojavi možnost, je blok prešel v naprej metoda teče. Tukaj bloki ne delajo veliko, samo v vrednostih imajo nastavitvene vrednosti. Naredili bi lahko več, kot je preverjanje, ali omenjena datoteka obstaja itd. Če obstajajo napake, se lahko iz teh blokov vržejo izjeme.
Končno je ukazna vrstica razčlenjena. To se zgodi s klicem na razčleniti! metoda na OptionParser objekt. Obstajata dve obliki te metode, razčleniti in razčleniti!. Kot nakazuje različica s klicajem, je uničujoča. Ne le da razčleni ukazno vrstico, ampak bo odstranil vse najdene možnosti ARGV. To je pomembno, pustil bo le seznam datotek, ki so na voljo po možnostih v ARGV.