Ruby: Kommandolinjeargumenter med ARGV
Baggrund
På samme måde som vi overdrager argumenter til metoder i Ruby, kan vi også overdrage argumenter til hele programmer. Det er præcis, hvad kommandolinjeargumenter gør. Hver gang vi kører vores Ruby-program, kan vi indtaste forskellige kommandolinjeargumenter og få forskellige resultater.
Hvorfor lære det?##
I Ruby-lektionen med titlen Putting the Form in Formatter brugte du gets.chomp
til at bringe brugerinput ind i dit Ruby-program. Ved at bruge kommandolinjeargumenter tilføjes der et nyt værktøj til din Ruby-værktøjsbælte, som du kan bruge til at få brugerinput ind i dit program, hvis du ønsker det.
Anvendelse af kommandolinjeargumenter###
Ruby opfanger kommandolinjeargumenter med et særligt array ved navn ARGV
. Når ARGV
skrives inde i dit Ruby-program, tager ARGV
en kommandolinjekommando, der ser sådan ud:ruby testing_argv.rb these are elements in the argv array
og opretter et array, der ser sådan ud:ruby testing_argv.rb these are elements in the argv array
og opretter et array, der ser sådan ud:
Nu skal du prøve!
Afprøv ARGV###
- I Sublime Text skal du oprette en fil med navnet
testing_argv.rb
ved at gå til File > New File … - Når du har oprettet din testfil, skal du sørge for at gemme den på et sted, der er let at finde, og lad os begynde at skrive vores kode!
- Sæt
ARGV
op til at opfange kommandolinjeargumenterInden fortesting_argv.rb
skal du tildeleARGV
til et array kaldetinput_array
, som vil binde indholdet afARGV
til en variabel.
Da ARGV
opretter et array, kan du kalde enhver metode på input_array
, som du kan kalde på et normalt array. F.eks. vil puts input_array.length
vende tilbage med det antal argumenter, som en bruger har angivet.
Du kan også udskrive resultaterne af arrayet ARGV
ved hjælp af puts input_array.to_s
. Den fulde testing_argv.rb
-fil kan se nogenlunde sådan ud:
For at teste din fil skal du køre programmet på kommandolinjen med flere argumenter efter filnavnet, f.eks. sådan her: ruby testing_argv.rb these are elements in the argv array
Din kommandolinje bør fortælle dig, at der er 7 elementer i arrayet, og udskrive dem til din konsol, som her:
Ved brug af Splat til at adskille det første argument fra resten##
For dit program vil du måske bruge det første kommandolinjeargument som en kommando, og derefter bruge resten af argumenterne som en tekststreng, som du kan gøre ting med. Her er et nyt Ruby-udtryk, der kan hjælpe dig med at opnå dette på en enkel måde: first_arg, *the_rest = ARGV
Her tildeler du to variabler på samme tid! Kommaet adskiller dem, og *
kaldes en splat. Du har brugt splat’en på en lignende måde i Codecademy-lektionen om Ruby Metoder, blokke og sortering. På grund af *
ved Ruby, at ARGV
skal tildeles first_arg
, og resten af argumenterne skal tildeles the_rest. Lad os bevise det:
I dit program skal du skrive:
puts first_arg
puts the_rest
Kør derefter ruby testing_argv.rb first and all the rest!
inde på din kommandolinje.
##Hvordan kan du bruge denne teknik?##Kommandolinjen kan være en kraftfuld grænseflade for et program, du har skrevet. Disse metoder gør det muligt for dig at opfange brugerinput og derefter bruge det til noget godt.
For eksempel, hvis du har bygget et ATM-program med Ruby, kan du bruge kommandolinjeargumenter til at kalde metoder og ændre din bankkonto. Du kunne skrive et ARGV-array, der tager dit første kommandolinjeargument til at udføre en metode, f.eks. “withdraw”, og derefter bruge argumenterne efter det, måske “$20”, til at angive, hvor mange penge der skal hæves.
Der er uendeligt mange måder at bruge ARGV og splats på til at hente data fra kommandolinjen og få dem til at gøre noget for dig. Hvis du ønsker at komme til bunds i hvordan ARGV fungerer, kan du læse dets Ruby-dokumentation her.