Ruby je vybaven výkonným a flexibilním nástrojem pro analýzu možností příkazového řádku, OptionParser. Jakmile se naučíte, jak to používat, už se nikdy nevrátíte k ARGVu ručně. OptionParser má řadu funkcí, díky kterým je docela atraktivní pro programátory Ruby. Pokud jste někdy analyzovali možnosti ručně v Ruby nebo C, nebo s getoptlong Funkce C, uvidíte, jak jsou některé z těchto změn vítány.
- OptionParser je SUCHÝ. Přepínač příkazového řádku, jeho argumenty, kód, který se má spustit, když se objeví, a popis přepínače příkazového řádku stačí napsat ve skriptu pouze jednou. OptionParser pro vás z tohoto popisu automaticky vygeneruje obrazovky nápovědy a z jeho popisu vyvodí vše o argumentu. Například bude znát --file [FILE] volba je volitelná a bere jediný argument. Také to bude vědět - [- ne] -verbose je opravdu dvě možnosti a přijme obě formy.
- OptionParser automaticky převede volby na konkrétní třídu. Pokud volba vezme celé číslo, může převést libovolný řetězec předaný na příkazovém řádku na celé číslo. To omezí některé z tedia zapojeného do analýzy možností příkazového řádku.
- Všechno je velmi uzavřené. Všechny možnosti jsou na stejném místě a účinek možnosti je přímo vedle definice možnosti. Pokud je třeba doplnit, změnit nebo někdo prostě chce vidět, co dělá, musí se podívat jen na jedno místo. Jakmile je příkazový řádek analyzován, výsledky budou mít pouze jeden Hash nebo OpenStruct.
Už dost, Ukažte mi nějaký kód
Zde je jednoduchý příklad, jak používat OptionParser. Nepoužívá žádné pokročilé funkce, pouze základy. Existují tři možnosti a jedna z nich bere parametr. Všechny možnosti jsou povinné. Existují -v / - podrobná a -q / - rychle možnosti, stejně jako -l / - logfile SOUBOR volba. Skript navíc obsahuje seznam souborů nezávislých na možnostech.
#! / usr / bin / env ruby
# Skript, který bude předstírat, že změní velikost několika obrázků
vyžadují 'optparse'
# Tento hash bude obsahovat všechny možnosti
# analyzováno z příkazového řádku uživatelem
# OptionParser.
options = {}
optparse = OptionParser.new do | opts |
# Nastavit banner, zobrazený nahoře
# obrazovky nápovědy.
opts.banner = "Použití: optparse1.rb [možnosti] file1 file2 ..."
# Definujte možnosti a co dělají
options [: verbose] = false
opts.on ('-v', '--verbose', 'Output more information')
options [: verbose] = true
konec
options [: quick] = false
opts.on ('-q', '--quick', 'Proveďte úkol rychle')
options [: quick] = true
konec
options [: logfile] = nula
opts.on ('-l', '--logfile FILE', 'Write log to FILE') do | file |
options [: logfile] = file
konec
# Zobrazí se obrazovka nápovědy, všechny programy jsou
# předpokládá, že má tuto možnost.
opts.on ('-h', '--help', 'Display this screen')
staví se
výstup
konec
konec
# Analyzovat příkazový řádek. Pamatujte, že existují dvě formy
# metody analýzy. Metoda „parse“ jednoduše analyzuje
# ARGV, zatímco 'parse!' metoda analyzuje ARGV a odstraní
# všechny nalezené možnosti a parametry pro
# možnosti. Zbývá seznam souborů pro změnu velikosti.
optparse.parse!
vloží "Být podrobný", pokud možnosti [: podrobný]
vloží „Být rychlý“, pokud možnosti [: rychlý]
vloží "Protokolování do souboru # {options [: logfile]}", pokud možnosti [: logfile]
ARGV.each do | f |
vloží "Změna velikosti obrázku # {f} ..."
spánek 0,5
konec
Prozkoumání Kodexu
Chcete-li začít s, optparse knihovna je povinná. Pamatujte, že to není klenot. Je dodáván s Ruby, takže není třeba instalovat drahokam ani vyžadovat rubygemy před optparse.
V tomto skriptu jsou dva zajímavé objekty. První je možnosti, deklarována v nejvyšší míře. Je to jednoduché prázdné hash. Když jsou možnosti definovány, zapíší do této hodnoty hash své výchozí hodnoty. Výchozí chování je například pro tento skript ne být podrobný, tak možnosti [: podrobný] je nastavena na false. Když se na příkazovém řádku objeví možnosti, změní hodnoty v možnosti aby odrážel jejich účinek. Například, když -v / - podrobná se setká, bude to přiřazeno true možnosti [: podrobný].
Druhým zajímavým objektem je optparse. To je OptionParser sám objekt. Když konstruujete tento objekt, předáte mu blok. Tento blok je spuštěn během výstavby a vytvoří seznam možností v interních datových strukturách a připraví se na rozbor všeho. Právě v tomto bloku se odehrává veškerá magie. Zde definujete všechny možnosti.
Definování možností
Každá možnost sleduje stejný vzor. Nejprve zapíšeme výchozí hodnotu do hash. To se stane, jakmile OptionParser je postaven. Dále zavoláte nametoda, který definuje samotnou možnost. Existuje několik forem této metody, ale zde se používá pouze jedna. Ostatní formuláře umožňují definovat automatické převody typu a sady hodnot, na které je volba omezena. Zde použité tři argumenty jsou krátká forma, dlouhá forma a popis možnosti.
na metoda odvodí řadu věcí z dlouhé formy. Jedna věc je odvozená je přítomnost jakýchkoli parametrů. Pokud jsou v možnosti přítomny nějaké parametry, předá je jako parametry do bloku.
Pokud je možnost nalezena na příkazovém řádku, blok byl předán do na metoda je spuštěna. Bloky zde moc nedělají, pouze nastavují hodnoty v možnostech hash. Mohlo by se udělat více, například zkontrolovat, zda existuje uvedený soubor atd. Pokud se vyskytnou nějaké chyby, mohou být z těchto bloků vyvolány výjimky.
Nakonec je analyzován příkazový řádek. K tomu dochází voláním analyzovat! metoda na OptionParser objekt. Ve skutečnosti existují dvě formy této metody, analyzovat a analyzovat!. Jak naznačuje verze s vykřičníkem, je destruktivní. Nejenže analyzuje příkazový řádek, ale také odstraní všechny nalezené možnosti ARGV. Toto je důležitá věc, ponechá pouze seznam souborů dodaných po možnostech v ARGV.