Použijte OptionParser k analýze příkazů v Ruby

V článek o vlastnostech OptionParser diskutovali jsme o některých důvodech, které způsobují používání OptionParser v Rubín lépe analyzovat ARGV ručně příkazy ručně. Nyní je čas začít se učit, jak používat OptionParser a jeho funkce.

Následující kód kotlové desky bude použit pro všechny příklady v tomto tutoriálu. Chcete-li vyzkoušet některý z příkladů, jednoduše vložte příklady opts.on blok vedle komentáře TODO. Spuštění programu vytiskne stav možností a ARGV, což vám umožní prozkoumat účinky vašich přepínačů.

#! / usr / bin / env ruby
vyžadují 'optparse'
vyžadovat 'pp'
# Tento hash bude obsahovat všechny možnosti
# analyzováno z příkazového řádku uživatelem
# OptionParser.
options = {}
optparse = OptionParser.new do | opts |
# TODO: Sem vložte možnosti příkazového řádku
# 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
instagram viewer

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

Jednoduchý přepínač

Jednoduchý přepínač je argument bez volitelných formulářů nebo bez parametrů. Účinkem bude jednoduše nastavit příznak v možnostech hash. Žádné další parametry nebudou předány do na metoda.

options [: simple] = false
opts.on ('-s', '--simple', "Simple argument") ano
options [: simple] = true
konec

Přepněte pomocí povinného parametru

Přepínače, které berou parametr, musí pouze uvést název parametru v dlouhé formě přepínače. Například, "-f", "--file FILE" znamená, že přepínač -f nebo --file vezme jediný parametr s názvem FILE a tento parametr je povinný. Nemůžete použít -f nebo --file, aniž byste mu předali parametr.

možnosti [: mand] = ""
opts.on ('-m', '- povinný SOUBOR', "povinný argument") do | f |
možnosti [: mand] = f
konec

Přepnout s volitelným parametrem

Parametry přepínače nemusí být povinné, mohou být volitelné. Chcete-li prohlásit parametr přepínače za nepovinný, vložte jeho název do závorek v popisu přepínače. Například, "--logfile [FILE]" znamená, že parametr FILE je volitelný. Pokud není dodán, program bude předpokládat zdravý výchozí stav, například soubor s názvem log.txt.

V příkladu je to idiom a = b || C se používá. Toto je zkratka pro "a = b, ale pokud b je nepravdivé nebo nulové, a = c".

options [: opt] = false
opts.on ('-o', '--optional [OPT]', "Optional Argument") do | f |
možnosti [: opt] = f || "nic"
konec

Automaticky převést na Float

OptionParser může automaticky převádět argumenty na některé typy. Jedním z těchto typů je Float. Chcete-li automaticky převést argumenty na přepínač na Float, předejte Float do na metoda za řetězcem popisu přepínače.

Automatické převody jsou užitečné. Nejenom, že vás uloží krok převodu řetězce na požadovaný typ, ale také zkontrolují formát za vás a vyhodí výjimku, pokud je formátován nesprávně.

možnosti [: float] = 0,0
opts.on ('-f', '--float NUM', Float, "Převést na float") do | f |
možnosti [: float] = f
konec

Některé jiné typy, které OptionParser dokáže převést, aby automaticky zahrnovaly čas a celé číslo.

Seznamy argumentů

Argumenty lze interpretovat jako seznamy. To lze považovat za převod na pole, když jste převedli na Float. Zatímco váš řetězec voleb může definovat parametr, který má být nazýván „a, b, c“, OptionParser slepě povolí libovolný počet prvků v seznamu. Pokud tedy potřebujete určitý počet prvků, nezapomeňte sami zkontrolovat délku pole.

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

Sada argumentů

Někdy má smysl omezit argumenty na přechod na několik možností. Například následující přepínač vezme pouze jeden povinný parametr a parametr musí být jeden z Ano, Ne nebo možná. Pokud je parametr vůbec něco jiného, ​​vyvolá se výjimka.

To provedete předáním seznamu přijatelných parametrů jako symbolů za řetězce popisu přepínače.

možnosti [: set] =: yes
opts.on ('-s', '--set OPT', [: yes,: no,: možná], "Parametry ze sady") do | s |
možnosti [: set] = s
konec

Negativní formuláře

Spínače mohou mít negovanou podobu. Vypínač --negated může mít ten, který má opačný efekt --no-negated. Chcete-li to popsat v řetězci popisu přepínače, umístěte alternativní část do závorek: - [ne-] negováno. Pokud se setkáte s prvním formulářem, true bude předán do bloku a false bude blokován, pokud se objeví druhý formulář.

options [: neg] = false
opts.on ('-n', '- [no-] negated', „Negated forms“) do | n |
možnosti [: neg] = n
konec