I artikel om OptionParsers funktioner vi drøftede nogle af årsagerne til, at der bruges OptionParser i Rubin at foretrække fremfor at kigge gennem ARGV manuelt for at analysere kommandoer med hånden. Nu er det tid til at komme ned til at lære at bruge OptionParser og dens funktioner.
Følgende kedelpladekode bruges til alle eksemplerne i denne tutorial. For at prøve et af eksemplerne skal du blot placere eksemplerne opts.on blok ved siden af TODO-kommentaren. Når du kører programmet, udskrives tilstanden af indstillingerne har og ARGV, så du kan undersøge effekten af dine switches.
#! / usr / bin / env ruby
kræver 'optparse'
kræver 'pp'
# Denne hash indeholder alle mulighederne
# parset fra kommandolinjen af
# OptionParser.
indstillinger = {}
optparse = OptionParser.new do | opts |
# TODO: Sæt kommandolinjemuligheder her
# Dette viser hjælpeskærmen, alle programmer er
# antages at have denne mulighed.
opts.on ('-h', '--help', 'Display this screen') gør
sætter valg
Afslut
ende
ende
# Analyser kommandolinjen. Husk, at der er to former
# af analysemetoden. Metoden "analyser" analyserer simpelthen
# ARGV, mens 'parse!' metode analyserer ARGV og fjerner
# eventuelle fundne muligheder der samt parametre til
# indstillingerne. Hvad der er tilbage er listen over filer, der skal ændres.
optparse.parse!
pp "Indstillinger:", indstillinger
pp "ARGV:", ARGV
Enkel switch
En simpel switch er et argument uden valgfri formularer eller ingen parametre. Effekten vil være blot at sætte et flag i indstillingerne hash. Ingen andre parametre overføres til på metode.
indstillinger [: simple] = falsk
opts.on ('-s', '- simple', "Simple argument") gør
indstillinger [: simple] = sandt
ende
Skift med obligatorisk parameter
Kontakter, der tager en parameter, behøver kun at angive parameternavnet i den lange form af kontakten. For eksempel, "-f", "- fil FIL" betyder, at -f eller --file-kontakten tager en enkelt parameter kaldet FILE, og denne parameter er obligatorisk. Du kan ikke bruge enten -f eller - fil uden også at videregive den som en parameter.
optioner [: mand] = ""
opts.on ('-m', '- obligatorisk FIL', "Obligatorisk argument") do | f |
indstillinger [: mand] = f
ende
Skift med valgfrit parameter
Skiftparametre behøver ikke være obligatoriske, de kan være valgfri. For at erklære en switch-parameter valgfri skal du placere navnet i parentes i switchbeskrivelsen. For eksempel, "--logfile [FILE]" betyder, at FIL-parameteren er valgfri. Hvis det ikke leveres, antager programmet en fornuftig standard, såsom en fil kaldet log.txt.
I eksemplet er formspråket a = b || c anvendes. Dette er bare kortfattet for "a = b, men hvis b er falsk eller nul, er a = c".
indstillinger [: opt] = falsk
opts.on ('-o', '- valgfri [OPT]', "Valgfrit argument") do | f |
indstillinger [: opt] = f || "ikke noget"
ende
Konverter automatisk til Float
OptionParser kan automatisk konvertere argument til nogle typer. En af disse typer er Float. Hvis du automatisk vil konvertere dine argumenter til en switch til Float, skal du sende Float til på metode efter din switch beskrivelse strenge.
Automatisk konvertering er praktisk. Ikke kun sparer de dig trinnet med at konvertere strengen til den ønskede type, men tjekker også formatet for dig og vil kaste en undtagelse, hvis den er formateret forkert.
indstillinger [: float] = 0,0
opts.on ('-f', '- float NUM', Float, "Convert to float") do | f |
optioner [: float] = f
ende
Nogle andre typer, som OptionParser kan konvertere til automatisk, inkluderer Tid og heltal.
Lister over argumenter
Argumenter kan fortolkes som lister. Dette kan ses som konvertering til en matrix, som du konverterede til Float. Mens din optionstreng kan definere den parameter, der skal kaldes "a, b, c", tillader OptionParser et vilkårligt antal elementer på listen blindt. Så hvis du har brug for et specifikt antal elementer, skal du huske at kontrollere array-længden selv.
indstillinger [: liste] = []
opts.on ('-l', '- liste a, b, c', Array, "Liste over parametre") do | l |
indstillinger [: liste] = l
ende
Sæt med argumenter
Nogle gange er det fornuftigt at begrænse argumenter til at skifte til et par valg. For eksempel tager den følgende switch kun en enkelt obligatorisk parameter, og parameteren skal være en af Ja, ingen eller måske. Hvis parameteren overhovedet er noget andet, kastes en undtagelse.
For at gøre dette, skal du videregive en liste over acceptable parametre som symboler efter omskifterens beskrivelsestrenge.
indstillinger [: sæt] =: ja
opts.on ('-s', '- set OPT', [: ja,: nej,: måske], "Parametre fra et sæt") do | s |
indstillinger [: sæt] = s
ende
Negated Forms
Kontakter kan have en negeret form. Knappen --negated kan have en der har den modsatte effekt, kaldet --no-negeret. For at beskrive dette i skiftebeskrivelsesstrengen skal du placere den alternative del i parentes: - [no] negerede. Hvis den første formular er fundet, vil true blive sendt til blokken, og falsk vil blive blokeret, hvis den anden formular findes.
indstillinger [: neg] = falsk
opts.on ('-n', '- [no-] negated', "Negated forms") do | n |
indstillinger [: neg] = n
ende