Ruby: Argumente în linia de comandă cu ARGV
Background
În același mod în care trecem argumente la metode în Ruby, putem, de asemenea, să trecem argumente la programe întregi. Asta este exact ceea ce fac argumentele din linia de comandă. De fiecare dată când rulăm programul nostru Ruby, putem introduce diferite argumente de linie de comandă și putem obține rezultate diferite.
De ce să învățați acest lucru?##
În lecția Ruby intitulată „Putting the Form in Formatter”, ați folosit gets.chomp
pentru a introduce datele de intrare ale utilizatorului în programul dumneavoastră Ruby. Utilizarea argumentelor din linia de comandă adaugă o nouă unealtă la centura de instrumente Ruby, pe care o puteți folosi pentru a aduce inputul utilizatorului în programul dumneavoastră, dacă doriți.
Utilizarea argumentelor din linia de comandă##
Ruby captează argumentele din linia de comandă cu o matrice specială numită ARGV
. Atunci când este scris în interiorul programului dvs. Ruby, ARGV
va prelua o comandă de linie de comandă care arată astfel:ruby testing_argv.rb these are elements in the argv array
și va crea un array care arată astfel:
Acum încercați!
Încercând ARGV##
- În Sublime Text, creați un fișier numit
testing_argv.rb
mergând la File > New File … - După ce ați creat fișierul de test, asigurați-vă că îl salvați într-o locație ușor de găsit și haideți să începem să scriem codul nostru!
- Configurați
ARGV
pentru a capta argumentele din linia de comandăÎn interiorul luitesting_argv.rb
, atribuițiARGV
unui tablou numitinput_array
, care va lega conținutul luiARGV
de o variabilă.
Din moment ce ARGV
creează un tablou, puteți apela orice metodă pe input_array
pe care o puteți apela pe un tablou normal. De exemplu, puts input_array.length
se va întoarce cu numărul de argumente pe care un utilizator le-a trecut.
De asemenea, puteți imprima rezultatele tabloului ARGV
folosind puts input_array.to_s
. Fișierul complet testing_argv.rb
ar putea arăta cam așa:
Pentru a testa fișierul, rulați programul în linia de comandă cu mai multe argumente după numele fișierului, astfel: ruby testing_argv.rb these are elements in the argv array
Linia de comandă ar trebui să vă spună că există 7 elemente în matrice și să le tipărească în consolă, astfel: ruby testing_argv.rb these are elements in the argv array
Linia de comandă ar trebui să vă spună că există 7 elemente în matrice și să le tipărească în consolă, astfel:
Utilizarea Splat pentru a separa primul argument de restul##
Pentru programul dumneavoastră, este posibil să doriți să utilizați primul argument din linia de comandă ca o comandă, iar apoi să utilizați restul argumentelor ca un șir de text cu care puteți face lucruri. Iată o nouă expresie Ruby care vă poate ajuta să realizați acest lucru în mod simplu: first_arg, *the_rest = ARGV
Aici, atribuiți două variabile în același timp! Virgula le separă, iar *
se numește splat. Ați folosit splat-ul într-un mod similar în lecția de la Codecademy despre metode, blocuri și sortare Ruby. Datorită lui *
, Ruby știe să atribuie ARGV
la first_arg
, iar restul argumentelor la the_rest. Să demonstrăm acest lucru:
În programul dumneavoastră, scrieți: puts first_arg
puts the_rest
Apoi rulați ruby testing_argv.rb first and all the rest!
în interiorul liniei de comandă.
##Cum puteți utiliza această tehnică?##Linia de comandă poate fi o interfață puternică pentru un program pe care l-ați scris. Aceste metode vă vor permite să capturați datele de intrare ale utilizatorului și apoi să le folosiți în mod corespunzător.
De exemplu, dacă ați construit un program de bancomat cu Ruby, ați putea folosi argumente din linia de comandă pentru a apela metode și a modifica contul bancar. Ați putea scrie o matrice ARGV care să ia primul argument din linia de comandă pentru a executa o metodă, cum ar fi „withdraw”, și apoi să folosească argumentele de după, poate „$20”, pentru a specifica câți bani să retrageți.
Există infinite moduri de a folosi ARGV și splats pentru a obține date din linia de comandă și a le face să facă ceva pentru dumneavoastră. Dacă doriți să aflați cum funcționează ARGV, consultați documentul său Ruby-doc aici.
.