Ruby är utrustad med ett kraftfullt och flexibelt verktyg för att analysera kommandoradsalternativ, OptionParser. När du lär dig hur du använder detta kommer du aldrig tillbaka att titta igenom ARGV manuellt. OptionParser har ett antal funktioner som gör det ganska tilltalande för Ruby-programmerare. Om du någonsin har analyserat alternativ för hand i Ruby eller C, eller med getoptlong C-funktion, ser du hur välkomna vissa av dessa förändringar är.
Så här är ett enkelt exempel på hur du använder OptionParser. Det använder inte någon av de avancerade funktionerna, bara grunderna. Det finns tre alternativ, och ett av dem tar en parameter. Alla alternativ är obligatoriska. Det finns -v / - verbose och -q / - snabbt alternativ, liksom -l / - loggfil. FIL alternativ. Dessutom tar skriptet en lista över filer oberoende av alternativen.
#! / usr / bin / env ruby
# Ett skript som låtsas ändra storlek på ett antal bilder
kräver "optparse"
# Denna hash kommer att innehålla alla alternativ
# tolkad från kommandoraden av
# OptionParser.
alternativ =
optparse = OptionParser.new do | opts |
# Ställ in ett banner, som visas högst upp
# på hjälpskärmen.
opts.banner = "Användning: optparse1.rb [alternativ] fil1 fil2 ..."
# Definiera alternativen och vad de gör
alternativ [: verbose] = falskt
opts.on ('-v', '--verbose', 'Output more information') gör
alternativ [: verbose] = true
slutet
alternativ [: snabb] = falskt
opts.on ('-q', '--quick', 'Utför uppgiften snabbt') gör
alternativ [: snabb] = sant
slutet
alternativ [: logfile] = noll
opts.on ('-l', '--logfil FIL', 'Skriv logg till FIL') do | fil |
optioner [: logfile] = fil
slutet
# 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!
sätter "Att vara verbos" om alternativ [: verbose]
sätter "Att vara snabb" om alternativ [: snabb]
sätter "Loggning till fil # alternativ [: logfil]" om alternativ [: logfil]
ARGV.each do | f |
sätter "Ändra storlek på bild nr f ..."
sova 0,5
slutet
Till att börja med, optparse bibliotek krävs. Kom ihåg att detta inte är en pärla. Den levereras med Ruby, så det finns inget behov att installera en pärla eller kräva RubyGems innan optparse.
Det finns två intressanta objekt i det här skriptet. Den första är alternativ, deklareras till det högsta räckvidden. Det är en enkel tom hash. När alternativ definieras skriver de sina standardvärden till denna hash. Till exempel är standardbeteendet för det här skriptet inte vara ordbok, så flaggor [: utförlig] är inställd på falsk. När alternativ stöds på kommandoraden kommer de att ändra värdena i alternativ för att återspegla deras effekt. Till exempel när -v / - verbose påträffas kommer den att tilldela true till flaggor [: utförlig].
Det andra intressanta objektet är optparse. Det här är OptionParser objektet självt. När du konstruerar detta objekt passerar du det ett block. Detta block körs under konstruktion och kommer att bygga en lista med alternativ i interna datastrukturer och gör dig redo att analysera allt. Det är i detta block som all magin händer. Du definierar alla alternativ här.
Varje alternativ följer samma mönster. Du skriver först standardvärdet i hash. Detta kommer att ske så snart som OptionParser är konstruerad. Därefter ringer du till på metod, som definierar själva alternativet. Det finns flera former av denna metod, men endast en används här. De andra formerna låter dig definiera omvandlingar av automatisk typ och värden som ett alternativ är begränsat till. De tre argumenten som används här är den korta formen, den långa formen och beskrivningen av alternativet.
De på metoden kommer att sluta ett antal saker från den långa formen. En sak är att sluta sig är närvaron av några parametrar. Om det finns några parametrar i alternativet, kommer det att skicka dem som parametrar till blocket.
Om alternativet stöter på kommandoraden överförs blocket till på metoden körs. Här gör blocken inte mycket, de ställer bara in värden i alternativ-hash. Mer kan göras, till exempel att kontrollera att en fil som hänvisas till finns osv. Om det finns några fel kan undantag kastas från dessa block.
Slutligen analyseras kommandoraden. Detta händer genom att ringa parse! metod på en OptionParser objekt. Det finns faktiskt två former av denna metod, parse och parse!. Som versionen med utropstecken antyder är den förstörande. Den analyserar inte bara kommandoraden, utan tar bort alla alternativ som finns från argv. Detta är en viktig sak, det kommer bara att lämna listan över filer som levereras efter alternativen i argv.