I artikel som diskuterar OptionParsers funktioner Vi diskuterade några av orsakerna till att använda OptionParser i Rubin att föredra att manuellt titta igenom ARGV för att analysera kommandon för hand. Nu är det dags att lära sig hur man använder OptionParser och dess funktioner.
Följande pannplattkod kommer att användas för alla exempel i denna handledning. För att prova något av exemplen, sätt bara exemplet opts.on blockera bredvid TODO-kommentaren. När du kör programmet kommer du att skriva ut statusen för alternativen har och ARGV, så att du kan undersöka effekterna av dina switchar.
#! / usr / bin / env ruby
kräver "optparse"
kräver "pp"
# Denna hash kommer att innehålla alla alternativ
# tolkad från kommandoraden av
# OptionParser.
alternativ = {}
optparse = OptionParser.new do | opts |
# TODO: Sätt kommandoradsalternativ här
# Detta visar hjälpskärmen, alla program är det
# antog att ha det här alternativet.
opts.on ('-h', '--help', 'Visa den här skärmen') gör
sätter val
utgång
slutet
slutet
# Analysera kommandoraden. Kom ihåg att det finns två former
# av analysmetoden. Metoden "analysera" analyserar helt enkelt
# ARGV, medan "parse!" metod analyserar ARGV och tar bort
# alla alternativ som finns där, liksom alla parametrar för
# alternativen. Det som finns kvar är listan över filer som ska ändras.
optparse.parse!
pp "Alternativ:", alternativ
pp "ARGV:", ARGV
Enkel switch
En enkel switch är ett argument utan valfria formulär eller inga parametrar. Effekten blir att helt enkelt sätta en flagga i alternativen hash. Inga andra parametrar kommer att skickas till på metod.
alternativ [: enkelt] = falskt
opts.on ('-s', '- enkel', 'Enkelt argument') gör
alternativ [: enkelt] = sant
slutet
Växla med obligatorisk parameter
Omkopplare som tar en parameter behöver bara ange parameternamnet i växelns långa form. Till exempel, "-f", "- fil FIL" betyder att omkopplaren -f eller --fil tar en enda parameter som heter FILE, och denna parameter är obligatorisk. Du kan inte använda varken -f eller -file utan att också lämna den en parameter.
optioner [: mand] = ""
opts.on ('-m', '- obligatorisk FIL', "Obligatoriskt argument") do | f |
alternativ [: mand] = f
slutet
Växla med valfri parameter
Bytparametrar behöver inte vara obligatoriska, de kan vara valfria. För att förklara en omkopplarparameter valfri, placera dess namn inom parentes i omkopplarbeskrivningen. Till exempel, "--logfile [FILE]" betyder att FIL-parametern är valfri. Om det inte levereras kommer programmet att anta ett sant standard, till exempel en fil som heter log.txt.
I exemplet, formspråket a = b || c är använd. Detta är bara kortfattat för "a = b, men om b är falskt eller noll, a = c".
alternativ [: opt] = falskt
opts.on ('-o', '- valfritt [OPT]', "Valfritt argument") do | f |
alternativ [: opt] = f || "ingenting"
slutet
Konvertera automatiskt till Float
OptionParser kan automatiskt konvertera argument till vissa typer. En av dessa typer är Float. För att automatiskt konvertera dina argument till en växel till Float, skicka Float till på metod efter dina strängar för växelbeskrivning
Automatiska omvandlingar är praktiska. De sparar inte bara steget för att konvertera strängen till önskad typ utan kontrollerar också formatet för dig och kommer att kasta ett undantag om det är felaktigt formaterat.
alternativ [: float] = 0.0
opts.on ('-f', '- float NUM', Float, "Convert to float") do | f |
alternativ [: float] = f
slutet
Vissa andra typer som OptionParser kan konvertera till inkluderar automatiskt Time and Integer.
Listor över argument
Argument kan tolkas som listor. Detta kan ses som omvandling till en matris, när du konverterade till Float. Medan din alternativsträng kan definiera den parameter som ska kallas "a, b, c", tillåter OptionParser blint ett antal element i listan. Så om du behöver ett visst antal element, se till att du själv kontrollerar matrislängden.
alternativ [: list] = []
opts.on ('-l', '- lista a, b, c', Array, "Lista över parametrar") do | l |
alternativ [: lista] = l
slutet
Uppsättning av argument
Ibland är det vettigt att begränsa argument till en växling till några val. Till exempel kommer följande switch endast att ta en enda obligatorisk parameter, och parametern måste vara en av ja, Nej eller kanske. Om parametern alls är något annat kommer ett undantag att kastas.
För att göra detta, passera en lista med acceptabla parametrar som symboler efter strängarna för omkopplarens beskrivning.
alternativ [: set] =: ja
opts.on ('-s', '- set OPT', [: ja,: nej,: kanske], "Parametrar från en uppsättning") do | s |
alternativ [: set] = s
slutet
Negated Forms
Omkopplare kan ha en negerad form. Bytet --negated kan ha en som gör motsatt effekt, kallas --no-negeras. För att beskriva detta i strömställarens beskrivningssträng, placera den alternativa delen i parentes: - [nr-] negerade. Om den första formen stöds överförs true till blocket och falskt kommer att blockeras om den andra formen stöds på.
alternativ [: neg] = falskt
opts.on ('-n', '- [no-] negated "," Negated former ") do | n |
alternativ [: neg] = n
slutet