Gebruik OptionParser om opdrachten in Ruby te ontleden

In de artikel waarin de functies van OptionParser worden besproken we bespraken enkele van de redenen waarom OptionParser wordt gebruikt in Robijn beter dan handmatig door ARGV te kijken om te ontleden commando's met de hand. Nu is het tijd om te leren hoe u OptionParser en zijn functies kunt gebruiken.

De volgende standaardcode wordt gebruikt voor alle voorbeelden in deze tutorial. Om een ​​van de voorbeelden te proberen, plaatst u gewoon de voorbeelden opts.on blok naast de TODO-opmerking. Als u het programma uitvoert, wordt de status van de opties en ARGV afgedrukt, zodat u de effecten van uw schakelaars kunt onderzoeken.

#! / usr / bin / env robijn
vereisen 'optparse'
vereisen 'pp'
# Deze hash bevat alle opties
# geparseerd vanaf de opdrachtregel door
# OptionParser.
options = {}
optparse = OptionParser.new do | opts |
# TODO: plaats hier de opdrachtregelopties
# Dit toont het helpscherm, alle programma's zijn dat
# verondersteld deze optie te hebben.
opts.on ('-h', '--help', 'Dit scherm weergeven') doen
instagram viewer

zet opts
Uitgang
einde
einde
# Ontleed de opdrachtregel. Onthoud dat er twee vormen zijn
# van de ontleedmethode. De 'parse'-methode parseert eenvoudig
# ARGV, terwijl het 'ontleden!' methode parseert ARGV en verwijdert
# alle daar gevonden opties, evenals eventuele parameters voor
# de opties. Wat overblijft is de lijst met bestanden waarvan het formaat moet worden gewijzigd.
optparse.parse!
pp "Opties:", opties
pp "ARGV:", ARGV

Eenvoudige schakelaar

Een simpele omschakeling is een argument zonder optionele formulieren of zonder parameters. Het effect is dat u eenvoudig een vlag in de opties plaatst hasj. Er worden geen andere parameters doorgegeven aan de Aan methode.

opties [: eenvoudig] = onwaar
opts.on ('-s', '--simple', "Simple argument") doen
opties [: eenvoudig] = waar
einde

Schakel met verplichte parameter

Switches die een parameter gebruiken, hoeven alleen de parameternaam in de lange vorm van de switch te vermelden. Bijvoorbeeld, "-f", "--file FILE" betekent dat de schakeloptie -f of --file een enkele parameter gebruikt met de naam FILE, en deze parameter is verplicht. Je kunt -f of --file niet gebruiken zonder het ook een parameter door te geven.

opties [: mand] = ""
opts.on ('-m', '--mandatory FILE', "Verplicht argument") do | f |
opties [: mand] = f
einde

Schakel met optionele parameter

Switchparameters hoeven niet verplicht te zijn, ze kunnen optioneel zijn. Om een ​​schakelaarparameter optioneel te verklaren, plaatst u de naam tussen haakjes in de schakelaarbeschrijving. Bijvoorbeeld, "--logbestand [FILE]" betekent dat de parameter FILE optioneel is. Indien niet meegeleverd, zal het programma een gezonde standaard aannemen, zoals een bestand met de naam log.txt.

In het voorbeeld het idioom a = b || c is gebruikt. Dit is slechts een afkorting voor "a = b, maar als b onwaar of nul is, a = c".

opties [: opt] = false
opts.on ('-o', '--optional [OPT]', "Optioneel argument") doen | f |
opties [: opt] = f || "niets"
einde

Automatisch converteren naar zweven

OptionParser kan argumenten automatisch naar sommige typen converteren. Een van deze typen is Float. Als u uw argumenten automatisch wilt converteren naar een switch naar Float, geeft u Float door aan de Aan methode na de tekenreeksen van uw schakelaarbeschrijving.

Automatische conversies zijn handig. Ze besparen u niet alleen de stap van het converteren van de string naar het gewenste type, maar controleren ook het formaat voor u en zullen een uitzondering genereren als deze onjuist is opgemaakt.

opties [: float] = 0,0
opts.on ('-f', '--float NUM', Float, "Convert to float") doen | f |
opties [: float] = f
einde

Enkele andere typen waarnaar OptionParser kan converteren, omvatten automatisch Tijd en Integer.

Lijsten van argumenten

Argumenten kunnen worden geïnterpreteerd als lijsten. Dit kan worden gezien als conversie naar een array, zoals je hebt geconverteerd naar Float. Hoewel uw optiereeks de parameter kan definiëren die "a, b, c" wordt genoemd, staat OptionParser blindelings een onbeperkt aantal elementen in de lijst toe. Dus, als u een specifiek aantal elementen nodig heeft, controleer dan zeker de lengte van de array.

opties [: lijst] = []
opts.on ('-l', '--list a, b, c', Array, "Lijst van parameters") do | l |
opties [: lijst] = l
einde

Set argumenten

Soms is het logisch om argumenten te beperken tot een omschakeling naar een paar keuzes. De volgende schakelaar neemt bijvoorbeeld slechts één verplichte parameter en de parameter moet er een zijn Ja, Nee of kan zijn. Als de parameter helemaal iets anders is, wordt er een uitzondering gegenereerd.

Om dit te doen, geeft u een lijst met acceptabele parameters door als symbolen na de schakelstrings.

opties [: set] =: ja
opts.on ('-s', '--set OPT', [: ja,: nee,: misschien], "Parameters van een set") do | s |
opties [: set] = s
einde

Ontkende vormen

Switches kunnen een negated vorm hebben. De schakelaar - genegeerd kan er een hebben die het tegenovergestelde effect heeft, genaamd --niet genegeerd. Om dit in de switch-beschrijvingsreeks te beschrijven, plaatst u het alternatieve gedeelte tussen haakjes: - [nee-] ontkend. Als het eerste formulier wordt aangetroffen, wordt true doorgegeven aan het blok en wordt false geblokkeerd als het tweede formulier wordt aangetroffen.

opties [: neg] = false
opts.on ('-n', '- [no-] negated', "Negated Forms") doen | n |
opties [: neg] = n
einde
instagram story viewer