Globalne varijable su varijable kojima se može pristupiti s bilo kojeg mjesta u programu, bez obzira na opseg. Označene su znakom $ (znak dolara). Međutim, korištenje globalnih varijabli često se smatra "un-Ruby", a rijetko ćete ih vidjeti.
Definiranje globalnih varijabli
Globalne varijable su definirane i koriste se kao i svaka druga varijabla. Da biste ih definirali, jednostavno im dodijelite vrijednost i počnite ih koristiti. No, kao što njihovo ime sugerira, dodjeljivanje globalnim varijablama iz bilo koje točke programa ima globalne implikacije. Sljedeći program to pokazuje. Metoda će izmijeniti globalnu varijablu i to će utjecati na to drugi metoda radi.
$ brzina = 10. def ubrzati. $ brzina = 100. kraj. def pass_speed_trap. ako je $ brzina> 65. # Dajte programu kartu za prebrzu vožnju. kraj. kraj. ubrzati. pass_speed_trap.
Nepopularan
Pa zašto je to "un-Ruby" i zašto ne vidite globalne varijable vrlo često? Jednostavno rečeno, lomi se enkapsulacija. Ako bilo koja klasa ili metoda po volji može mijenjati stanje globalnih varijabli bez ikakvog sloja sučelja druge klase ili metode koje se oslanjaju na tu globalnu varijablu mogu se ponašati neočekivano i nepoželjno način. Nadalje, takve interakcije mogu biti vrlo teške za uklanjanje pogrešaka. Što je promijenilo tu globalnu varijablu i kada? Pregledavat ćete prilično puno koda da biste pronašli što je učinilo, a to bi se moglo izbjeći ne kršenjem pravila enkapsulacije.
Ali to ne znači da su globalne varijable nikada koristi u Ruby. Postoji veliki broj posebnih globalnih varijabli s jednoznačnim imenima (a-la Perl) koji se mogu koristiti u vašem programu. Predstavljaju stanje samog programa i čine stvari poput izmjene separatora zapisa i polja za sve dobiva metode.
Globalne varijable
- $0 - Ova varijabla, koja je označena sa 0 USD (to je nula), sadrži naziv skripte najviše razine koja se izvršava. Drugim riječima, datoteka skripte koja je pokrenuta iz naredbeni redak, a ne datoteka skripte u kojoj se nalazi trenutno izvršavajući kôd. Dakle, ako script1.rb pokrenut je iz naredbenog retka, zadržao bi se script1.rb. Ako je potrebna ova skripta script2.rb, $ 0 u toj datoteci skripte također bi bilo script1.rb. Naziv $ 0 zrcali konvenciju imenovanja koja se koristi za skriptiranje ljuske UNIX-a za istu svrhu.
- $* - Argumenti naredbenog retka u nizu označeni sa $ * (znak dolara i zvjezdica). Na primjer, da ste trčali ./script.rb arg1 arg2, tada bi $ * bio ekvivalentan % w {arg1 arg2}. To je ekvivalentno posebnom argv niz i ima manje opisni naziv, pa se rijetko koristi.
- $$ - ID procesa tumača, označen sa $$ (dva znaka dolara). Poznavanje vlastitog ID-a procesa često je korisno u programima daona (koji se izvode u pozadini, nevezani s bilo kojeg terminala) ili sistemskim uslugama. No, to postaje malo složenije kada su uključene niti, pa budite oprezni da ih ne koristite slijepo.
- $ / i $ \ - Ovo su separatori ulaza i izlaza. Kada čitate objekte koristeći dobiva i ispisati ih koristeći stavlja, tim se znakom koristi kada se pročita čitav "zapis" ili što se ispisuje između više zapisa. Prema zadanim postavkama to bi trebao biti znak nove linije. Ali budući da utječu na ponašanje svih IO objekata, rijetko se koriste, ako uopće. Možete ih vidjeti u manjim skriptama gdje kršenje pravila enkapsulacije nije problem.
- $? - Izlazni status posljednjeg izvršenog podređenog postupka. Od svih ovdje navedenih varijabli, ovo je vjerojatno najkorisnije. Razlog za to je jednostavan: ne možete dobiti izlazni status dječjih procesa prema njihovoj povratnoj vrijednosti s sustav metoda, samo istinita ili lažna. Ako morate znati stvarnu povratnu vrijednost dječjeg procesa, morate koristiti ovu posebnu globalnu varijablu. Opet je naziv ove varijable preuzet iz ljuske UNIX-a.
- $_ - posljednji niz koji je pročitao dobiva. Ova varijabla može biti smetnja onima koji u Ruby dolaze s Perla. U Perlu varijabla $ _ znači nešto slično, ali posve drugačije. U Perlu $_ drži vrijednost zadnjeg izraza, a u Rubyu drži niz koji je vratio prethodni dobiva prizivanje. Njihova je upotreba slična, ali ono što oni uistinu drže vrlo je različito. Ni ovu varijablu često ne vidite (pomislite na to, rijetko vidite neku od tih varijabli), ali možete ih vidjeti u vrlo kratkim Ruby programima koji obrađuju tekst.
Ukratko, rijetko ćete vidjeti globalne varijable. Često su loše forme (i "un-Ruby") i korisni su samo u vrlo malim skriptama, gdje se u cijelosti može uvažiti puna posljedica njihove upotrebe. Postoji nekoliko posebnih globalnih varijabli koje se mogu koristiti, ali uglavnom se ne koriste. Ne trebate zaista toliko mnogo znati o globalnim varijablama da biste razumjeli većinu Ruby programa, ali trebali biste barem znati da ih ima.