Komandrindas opciju parsēšana rubīna veidā (OptionParser)
Alternatīva GetoptLong
Džons Lambs/Digital Vision/Getty Images
Ruby ir aprīkots ar jaudīgu un elastīgu rīku, lai parsētu komandrindas opcijas, OptionParser. Kad iemācīsities to izmantot, jūs nekad vairs neatgriezīsities pie ARGV manuālas apskatīšanas. OptionParser ir vairākas funkcijas, kas padara to diezgan pievilcīgu Ruby programmētājiem. Ja kādreiz esat parsējis opcijas ar roku programmā Ruby vai C, vai ar iet ilgi C funkciju, redzēsit, cik apsveicamas ir dažas no šīm izmaiņām.
Pietiek jau, parādiet man kodu
Tātad, šeit ir vienkāršs lietošanas piemērs OptionParser . Tas neizmanto nevienu no uzlabotajām funkcijām, tikai pamatinformāciju. Ir trīs iespējas, un vienai no tām ir parametrs. Visas opcijas ir obligātas. Tur ir -v/--verbose un -q/--ātrs opcijas, kā arī -l/--logfile FILE opciju. Turklāt skripts ņem failu sarakstu neatkarīgi no opcijām.
|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
Kodeksa pārbaude
Lai sāktu ar, optparse ir nepieciešama bibliotēka. Atcerieties, ka tas nav adārgakmens. Tas nāk ar Ruby, tāpēc nav nepieciešams instalēt dārgakmens vai pieprasīt rubīna dārgakmeņi pirms tam optparse .
Šajā skriptā ir divi interesanti objekti. Pirmais ir iespējas , norādīts visaugstākajā diapazonā. Tas ir vienkāršs tukšums hash . Kad opcijas ir definētas, tās ieraksta savas noklusējuma vērtības šajā jaucējkodā. Piemēram, noklusējuma darbība ir paredzēta šim skriptam nē esi runīgs, tātad opcijas[:verbose] ir iestatīts uz false. Kad komandrindā tiek atrastas opcijas, tās mainīs vērtības iespējas lai atspoguļotu to ietekmi. Piemēram, kad -v/--verbose tiek konstatēts, tas piešķirs patieso vērtību opcijas[:verbose] .
Otrs interesants objekts ir optparse . Tas ir OptionParser pats objekts. Kad jūs uzbūvējat šo objektu, jūs tam nododat bloku. Šis bloks tiek palaists izstrādes laikā, un tas izveidos opciju sarakstu iekšējās datu struktūrās un sagatavosies visu parsēt. Tieši šajā blokā notiek visa burvība. Šeit jūs definējat visas opcijas.
Opciju definēšana
Katra opcija atbilst vienam un tam pašam modelim. Vispirms jaucējkodā ierakstiet noklusējuma vērtību. Tas notiks, tiklīdz OptionParser ir uzbūvēts. Tālāk jūs zvanāt uz ieslēgts metodi , kas nosaka pašu opciju. Šai metodei ir vairākas formas, taču šeit tiek izmantota tikai viena. Citas veidlapas ļauj definēt automātiskas tipu konvertācijas un vērtību kopas, uz kurām opcija ir ierobežota. Šeit izmantotie trīs argumenti ir īsā forma, garā forma un opcijas apraksts.
The ieslēgts metode no garās formas secinās vairākas lietas. Viena lieta, ko var secināt, ir jebkuru parametru klātbūtne. Ja opcijā ir kādi parametri, tas nodos tos kā parametrus blokam.
Ja opcija ir sastopama komandrindā, bloks tiek nodots ieslēgts metode tiek palaists. Šeit bloki nedara daudz, tie tikai nosaka vērtības opciju hash. Varētu darīt vairāk, piemēram, pārbaudīt, vai fails, uz kuru ir norādīts, eksistē utt. Ja ir kādas kļūdas, no šiem blokiem var tikt pieļauti izņēmumi.
Visbeidzot, komandrinda tiek parsēta. Tas notiek, zvanot uz parsēt! metode uz an OptionParser objektu. Patiesībā ir divas šīs metodes formas, parsēt un parsēt! . Kā norāda versija ar izsaukuma zīmi, tā ir destruktīva. Tas ne tikai parsē komandrindu, bet arī noņems visas atrastās opcijas ARGV . Tas ir svarīgi, jo pēc opcijām tiks atstāts tikai to failu saraksts ARGV .