Uporabite OptionParser za razčlenitev ukazov v Rubyju

V članek, ki razpravlja o funkcijah OptionParserja razpravljali smo o nekaterih vzrokih, zaradi katerih je uporaba OptionParser v Ruby raje kot ročno razčleniti ARGV za razčlenitev ukazi ročno. Zdaj je čas, da se naučimo uporabe OptionParserja in njegovih funkcij.

Naslednja koda kotlovske plošče bo uporabljena za vse primere v tej vadnici. Če želite preizkusiti katerega koli primera, preprosto dodajte primer opts.on blok poleg komentarja TODO. Če zaženete program, natisnete stanje možnosti in ARGV, kar vam bo omogočilo preučitev učinkov vaših stikal.

#! / usr / bin / env rubin
zahtevajo 'optparse'
zahtevati 'pp'
# Ta hash vsebuje vse možnosti
# razčlenil v ukazni vrstici
# OptionParser.
možnosti = {}
optparse = OptionParser.new do | opts |
# TODO: Tukaj postavite možnosti ukazne vrstice
# 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
instagram viewer

# 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!
pp "Možnosti:", možnosti
pp "ARGV:", ARGV

Preprosto stikalo

Preprosto stikalo je argument brez poljubnih obrazcev ali brez parametrov. Učinek bo preprosto nastaviti zastavico v možnostih hašiš. Noben drug parameter ne bo posredovan na naprej metoda.

možnosti [: simple] = false
opts.on ('-s', '--simple', "Simple argument")
možnosti [: simple] = res
konec

Preklopite z obveznim parametrom

Stikala, ki sprejmejo parameter, morajo samo ime parametra navesti v dolgi obliki stikala. Na primer "-f", "--file DATOTEKA" pomeni, da stikalo -f ali --file sprejme en parameter, imenovan FILE, in ta parameter je obvezen. Ne morete uporabiti bodisi -f ali --file, ne da bi tudi podali parameter.

možnosti [: mand] = ""
opts.on ('-m', '--obvezni DATOTEKA, "Obvezen argument") do | f |
možnosti [: mand] = f
konec

Preklopite z dodatnim parametrom

Parametri preklopa ne smejo biti obvezni, lahko so izbirni. Če želite razglasiti preklopni parameter za neobvezen, v opis stikala vstavite njegovo ime v oklepaje. Na primer "--logfile [FILE]" pomeni, da parameter FILE ni izbran. Če ni na voljo, bo program sprejel privzeto, kot je datoteka z imenom log.txt.

V primeru, idiom a = b || c se uporablja. To je samo kratica za "a = b, če pa je b napačna ali nična, a = c".

možnosti [: opt] = napačno
opts.on ('-o', '- neobvezna [OPT]', "neobvezna trditev") | | | |
možnosti [: opt] = f || "nič"
konec

Samodejno pretvori v lebdeč

OptionParser lahko samodejno pretvori argument v nekatere vrste. Ena od teh vrst je Float. Če želite samodejno pretvoriti svoje argumente v prehod na Float, podajte Float v naprej metoda po vaših opisnih nizih stikala.

Samodejne pretvorbe so priročne. Ne le, da vam prihranijo korak pretvorbe niza v želeno vrsto, ampak tudi preverijo obliko in namesto tega bodo vrgli izjemo, če je nepravilno oblikovan.

možnosti [: float] = 0,0
opts.on ('-f', '--float NUM', Float, "Pretvori v plavajoči") do | f |
možnosti [: float] = f
konec

Nekatere druge vrste, ki jih lahko OptionParser pretvori, da samodejno vključujejo Čas in Integer.

Seznami argumentov

Argumente je mogoče razlagati kot sezname. To je mogoče pretvoriti v matriko, ko ste pretvorili v Float. Medtem ko lahko vaš niz možnosti definira parameter, ki se imenuje "a, b, c", bo OptionParser slepo dovolil poljubno število elementov na seznamu. Če torej potrebujete določeno število elementov, ne pozabite sami preveriti dolžine matrike.

možnosti [: seznam] = []
opts.on ('-l', '- seznam a, b, c', Array, "Seznam parametrov") do | l |
možnosti [: seznam] = l
konec

Nabor argumentov

Včasih je smiselno omejiti argumente na prehod na nekaj možnosti. Na primer, naslednje stikalo bo imelo samo en obvezen parameter, parameter pa mora biti eden od da, št ali mogoče. Če je parameter sploh kaj drugega, bo vržena izjema.

Če želite to narediti, po opisu nizov stikal podajte seznam sprejemljivih parametrov kot simbolov.

možnosti [: set] =: da
opts.on ('-s', '--set OPT', [: da,: ne,: morda], "Parametri iz niza") do | s |
možnosti [: set] = s
konec

Negirani obrazci

Stikala so lahko z negativno obliko. Stikalo - ni označeno lahko ima eno, ki naredi nasproten učinek, imenovano - ni zanikano. Če želite to opisati v opisnem nizu stikala, namestite nadomestni del v oklepaje: - [ne-] zanikano. Če naletite na prvi obrazec, bo true prešel v blok, false pa bo blokiran, če pride do drugega obrazca.

možnosti [: neg] = napačno
opts.on ('-n', '- [no-] negated', "Negated form") naredite | n |
možnosti [: neg] = n
konec