Ruby: Kommandozeilenargumente mit ARGV
Hintergrund
So wie wir in Ruby Argumente an Methoden übergeben, können wir auch Argumente an ganze Programme übergeben. Das ist genau das, was Kommandozeilenargumente tun. Jedes Mal, wenn wir unser Ruby-Programm ausführen, können wir verschiedene Befehlszeilenargumente eingeben und erhalten unterschiedliche Ergebnisse.
Warum lernen?##
In der Ruby-Lektion Putting the Form in Formatter hast du gets.chomp
verwendet, um Benutzereingaben in dein Ruby-Programm zu bringen. Die Verwendung von Kommandozeilenargumenten erweitert deinen Ruby-Werkzeuggürtel um ein neues Werkzeug, mit dem du Benutzereingaben in dein Programm bringen kannst, wenn du willst.
Befehlszeilenargumente verwenden##
Ruby fängt Befehlszeilenargumente mit einem speziellen Array namens ARGV
auf. Wenn Sie es in Ihr Ruby-Programm schreiben, nimmt ARGV
einen Kommandozeilenbefehl, der wie folgt aussieht:ruby testing_argv.rb these are elements in the argv array
und erstellt ein Array, das wie folgt aussieht:
Nun versuchen Sie es!
Ausprobieren von ARGV##
- Erstelle in Sublime Text eine Datei mit dem Namen
testing_argv.rb
, indem du auf Datei > Neue Datei … gehst - Nachdem du deine Testdatei erstellt hast, stelle sicher, dass du sie an einem leicht zu findenden Ort speicherst, und lass uns anfangen, unseren Code zu schreiben!
- Richten Sie
ARGV
ein, um Befehlszeilenargumente zu erfassenInnerhalb vontesting_argv.rb
weisen SieARGV
einem Array namensinput_array
zu, das den Inhalt vonARGV
an eine Variable bindet.
Da ARGV
ein Array erzeugt, können Sie jede Methode auf input_array
aufrufen, die Sie auch auf ein normales Array aufrufen können. Zum Beispiel gibt puts input_array.length
die Anzahl der Argumente zurück, die der Benutzer übergeben hat.
Sie können auch die Ergebnisse des ARGV
-Arrays mit puts input_array.to_s
ausgeben. Die vollständige testing_argv.rb
Datei könnte etwa so aussehen:
Um Ihre Datei zu testen, führen Sie das Programm auf der Kommandozeile mit mehreren Argumenten nach dem Dateinamen aus, etwa so: ruby testing_argv.rb these are elements in the argv array
Die Befehlszeile sollte Ihnen mitteilen, dass sich 7 Elemente in dem Array befinden, und diese auf der Konsole ausgeben, etwa so:
Verwendung von Splat, um das erste Argument vom Rest zu trennen##
Für Ihr Programm möchten Sie vielleicht das erste Kommandozeilenargument als Befehl verwenden und den Rest der Argumente als eine Textkette, mit der Sie etwas anfangen können. Hier ist ein neuer Ruby-Ausdruck, mit dem Sie dies ganz einfach erreichen können: first_arg, *the_rest = ARGV
Hier weisen Sie zwei Variablen gleichzeitig zu! Das Komma trennt sie, und das *
wird als Splat bezeichnet. In der Codecademy-Lektion über Ruby-Methoden, -Blöcke und -Sortierung haben Sie den Splat auf ähnliche Weise verwendet. Aufgrund des *
weiß Ruby, dass ARGV
an first_arg
und der Rest der Argumente an the_rest zuzuordnen ist. Beweisen wir es:
Schreibe in dein Programm: puts first_arg
puts the_rest
Dann führen Sie ruby testing_argv.rb first and all the rest!
in Ihrer Kommandozeile aus.
##Wie können Sie diese Technik anwenden?##Die Kommandozeile kann eine leistungsfähige Schnittstelle für ein von Ihnen geschriebenes Programm sein. Mit diesen Methoden können Sie Benutzereingaben erfassen und sie dann sinnvoll einsetzen.
Wenn du zum Beispiel ein Geldautomatenprogramm mit Ruby erstellt hast, könntest du Befehlszeilenargumente verwenden, um Methoden aufzurufen und dein Bankkonto zu ändern. Du könntest ein ARGV-Array schreiben, das dein erstes Kommandozeilenargument nimmt, um eine Methode wie „withdraw“ auszuführen, und dann die Argumente danach, vielleicht „$20“, verwenden, um festzulegen, wie viel Geld abgehoben werden soll.
Es gibt unendlich viele Möglichkeiten, ARGV und Splats zu verwenden, um Daten von der Kommandozeile zu erhalten und etwas für dich zu tun. Wenn du wissen willst, wie ARGV funktioniert, schau dir die Ruby-Doku hier an.