„Ruby“ yra aprūpintas galingu ir lanksčiu įrankiu, leidžiančiu analizuoti komandų eilutės parinktis „OptionParser“. Sužinoję, kaip tuo naudotis, niekada negrįšite ieškoti ARGV rankiniu būdu. „OptionParser“ turi daugybę funkcijų, kurios daro tai gana patraukliu „Ruby“ programuotojams. Jei kada nors nagrinėjote parinktis rankiniu būdu naudodami „Ruby“ ar „C“ arba naudodami „ getoptlong C funkcija, pamatysite, kokie laukiami kai kurie iš šių pakeitimų.
- „OptionParser“ yra SAUSAS. Savo scenarijuje turite tik vieną kartą parašyti komandinės eilutės jungiklį, jo argumentus, kodą, kuris bus paleistas, kai jis susidūrė, ir komandinės eilutės jungiklio aprašą. Iš šio aprašymo „OptionParser“ automatiškai sukurs jums pagalbos ekranus, taip pat pateiks viską apie argumentą iš jo aprašymo. Pavyzdžiui, jis žinos --failas [Failas] parinktis yra neprivaloma ir užima vieną argumentą. Be to, tai žinos - [- ne] -verbuotas yra tikrai dvi galimybės ir priims abi formas.
- „OptionParser“ automatiškai konvertuos parinktis į konkrečią klasę. Jei parinktis užima sveiką skaičių, ji bet kurią komandų eilutėje perduotą eilutę gali konvertuoti į sveiką skaičių. Tai sumažina tam tikrą nuobodulį, nagrinėjant komandų eilutės parinktis.
- Viskas labai ribota. Visos parinktys yra toje pačioje vietoje, o pasirinkimo variantas yra tinkamas kartu su pasirinkimo apibrėžimu. Jei variantų reikia pridėti, pakeisti arba kažkas nori tiesiog pamatyti, ką jie daro, yra tik viena vieta. Išnagrinėjus komandinę eilutę, rezultatus užfiksuos viena „Hash“ arba „OpenStruct“.
Jau pakankamai, parodyk man kodą
Taigi čia yra paprastas naudojimo pavyzdys „OptionParser“. Jis nenaudoja jokių pažangių funkcijų, o tik pagrindus. Yra trys variantai, ir vienas iš jų imasi parametro. Visos parinktys yra privalomos. Yra -v / - žodžiu ir -q / - greitai variantai, taip pat -l / - logfile byla variantas. Be to, scenarijuje pateikiamas failų, nepriklausomų nuo parinkčių, sąrašas.
#! / usr / bin / env rubinas
# Scenarijus, kuris apsimeta, kad reikia pakeisti kelių vaizdų dydį
reikalauti „optparse“
# Šis maišas išlaikys visas parinktis
# parsidavė iš komandinės eilutės
# „OptionParser“.
parinktys = {}
optparse = OptionParser.new padaryti | pasirenka |
# Nustatykite reklamjuostę, rodomą viršuje
# pagalbos ekrane.
opts.banner = "Naudojimas: optparse1.rb [parinktys] file1 file2 ..."
# Apibrėžkite parinktis ir tai, ką jos daro
parinktys [: veiksminga] = klaidinga
opts.on ('-v', '--verbose', 'Išvesk daugiau informacijos') daro
parinktys [: veiksminga] = teisinga
galas
parinktys [: greitas] = klaidingas
opts.on ('-q', '--quick', 'Greitai atlikite užduotį')
parinktys [: greitas] = teisinga
galas
parinktys [: logfile] = nulis
opts.on ('-l', '--logfile FILE', 'Write log to FILE') padaryti | failas |
parinktys [: logfile] = failas
galas
# Rodomas žinyno ekranas, visos programos yra
# manoma, kad turi šią parinktį.
opts.on ('-h', '--help', 'Rodyti šį ekraną') daro
pateikia pasirinkimus
išėjimas
galas
galas
# Analizuokite komandinę eilutę. Atminkite, kad yra dvi formos
analizės metodo Nr. „Parsidavimo“ metodas paprasčiausiai analizuojamas
# ARGV, o 'parsiduoti!' metodas analizuoja ARGV ir pašalina
# bet kokios ten rastos parinktys, taip pat bet kokie parametrai
# parinktys. Liko failų, kurių dydį reikia pakeisti, sąrašas.
optparse.parse!
iškelia „Būti verbalingu“, jei parinktys [: veiksminga]
iškelia „Būk greitas“, jei parinktys [: greitai]
pateikia „Prisijungimas prie failo # {parinktys [: logfile]}“, jei parinktys [: logfile]
ARGV.kartu padaryti | f |
pateikia „Vaizdo dydžio keitimas # {f} ...“
miegoti 0,5
galas
Nagrinėjant kodeksą
Norėdami pradėti nuo, optparse būtina biblioteka. Atminkite, kad tai nėra perlas. Jis tiekiamas su „Ruby“, todėl nereikia nei dėti brangakmenių, nei reikalauti rubygems prieš tai optparse.
Šiame scenarijuje yra du įdomūs objektai. Pirmasis yra galimybės, paskelbta aukščiausia apimtimi. Tai paprastas tuščias maišos. Apibrėžę parinktis, jie įrašo numatytąsias reikšmes į šią maišos juostą. Pvz., Numatytasis šio scenarijaus elgesys ne būk žodingas, taigi parinktys [: išsamus] yra nustatytas kaip klaidingas. Kai komandinėje eilutėje bus parinkčių, jos pakeis reikšmes galimybės kad atspindėtų jų poveikį. Pavyzdžiui, kada -v / - žodžiu susidūrė, tai priskirs tikra parinktys [: išsamus].
Antras įdomus objektas yra optparse. Tai yra „OptionParser“ pats objektas. Konstruodami šį objektą jūs perduosite jį blokui. Šis blokas vykdomas statant ir sukurs vidaus duomenų struktūrų parinkčių sąrašą ir pasirinks viską analizuoti. Būtent šiame bloke įvyksta visa magija. Čia apibrėžiate visas parinktis.
Funkcijų apibrėžimas
Kiekviena parinktis yra tokia pati. Pirmiausia į maišos tekstą įrašote numatytąją vertę. Tai įvyks iškart „OptionParser“ yra sukonstruotas. Tada jūs paskambinsite apiemetodas, kuris nusako patį variantą. Yra keletas šio metodo formų, tačiau čia naudojama tik viena. Kitos formos leidžia apibrėžti automatines tipo konversijas ir verčių rinkinius, kurių parinktis yra apribota. Trys čia naudojami argumentai yra trumpa, ilga forma ir pasirinkimo aprašymas.
apie metodas išsiaiškins daugelį dalykų iš ilgos formos. Aišku, bet kokie parametrai yra. Jei parinktyje yra kokių nors parametrų, ji juos perduos blokui.
Jei komandinėje eilutėje randama parinktis, blokas perduotas apie metodas vykdomas. Čia blokai nedaro daug, jie tiesiog nustato reikšmes parinkčių maišos srityje. Galima būtų nuveikti daugiau, pavyzdžiui, patikrinti, ar nurodytas failas egzistuoja ir pan. Jei yra klaidų, iš šių blokų gali būti padaryta išimčių.
Galiausiai komandinė eilutė išanalizuojama. Tai atsitinka paskambinus parsiduoti! metodas ant „OptionParser“ objektas. Iš tikrųjų yra dvi šio metodo formos, parsiduoti ir parsiduoti!. Kaip suponuoja versija su šauktuku, ji yra destruktyvi. Tai ne tik analizuoja komandinę eilutę, bet ir pašalins visas iš rastų parinkčių ARGV. Tai yra svarbus dalykas, paliks tik failų sąrašą, pateiktą po ARGV.