Globalne spremenljivke v Rubyju

Globalne spremenljivke so spremenljivk do katerega lahko dostopate od koder koli v programu ne glede na obseg. Označujejo jih z začetkom znaka $ (dolar). Vendar se uporaba globalnih spremenljivk pogosto šteje za "ne-Ruby", in le redko jih boste videli.

Določitev globalnih spremenljivk

Globalne spremenljivke so definirane in uporabljene kot vsaka druga spremenljivka. Če jih želite definirati, jim preprosto dodelite vrednost in jih začnete uporabljati. Toda, kot pove že njihovo ime, ima dodeljevanje globalnim spremenljivkam s katere koli točke programa globalne posledice. Naslednji program to dokazuje. Metoda bo spremenila globalno spremenljivko in to bo vplivalo na to, kako drugič metoda teče.


$ hitrost = 10. def pospešiti. $ hitrost = 100. konec. def pass_speed_trap. če je hitrost $> 65. # Dajte programu vozovnico za prekoračitev hitrosti. konec. konec. pospešiti. pass_speed_trap. 

Nepriljubljen

Zakaj je to "un-Ruby" in zakaj ne vidite globalnih spremenljivk zelo pogosto? Preprosto povedano, pokvari inkapsulacijo. Če kateri koli razred ali metoda lahko poljubno spremeni stanje globalnih spremenljivk, brez vmesnega sloja drugi razredi ali metode, ki temeljijo na tej globalni spremenljivki, se lahko obnašajo nepričakovano in nezaželeno način. Poleg tega je lahko takšne interakcije zelo težko odpraviti. Kaj je spremenilo to globalno spremenljivko in kdaj? Pregledali boste kar precej kode, da bi našli, kaj je storilo, in temu bi se lahko izognili, če ne bi kršili pravil za enkapsulacijo.

instagram viewer

Toda to ne pomeni, da so globalne spremenljivke nikoli uporablja v Ruby. Obstaja vrsta posebnih globalnih spremenljivk z enojnimi imeni (a-la Perl), ki se lahko uporablja v vašem programu. Predstavljajo stanje samega programa in naredijo stvari, kot so spreminjanje ločil zapisov in polja za vse dobi metod.

Globalne spremenljivke

  • $0 - Ta spremenljivka, označena z 0 USD (to je nič), vsebuje ime skripta najvišje ravni, ki se izvaja. Z drugimi besedami, skriptna datoteka, ki je bila zagnana iz ukazna vrstica, ne skriptna datoteka, ki vsebuje trenutno izvršeno kodo. Torej če script1.rb je potekal iz ukazne vrstice, zadržal bi se script1.rb. Če ta skript zahteva script2.rb, 0 $ v tej skriptni datoteki bi tudi bilo script1.rb. Ime $ 0 zrcali konvencijo o poimenovanju, ki se uporablja za enak namen v skripti za lupino UNIX.
  • $* - Argumenti ukazne vrstice v matriki, označeni z $ * (znak dolarja in zvezdica). Na primer, če bi tekel ./script.rb arg1 arg2, bi bil $ * enakovreden % w {arg1 arg2}. To je enakovredno posebnemu ARGV matrika in ima manj opisno ime, zato se redko uporablja.
  • $$ - ID procesa tolmača, označen s $$ (dva znaka dolarja). Poznavanje lastnega ID-ja procesa je pogosto uporabno v programih demonov (ki se izvajajo v ozadju, ki niso priključeni na noben terminal) ali sistemskih storitvah. Vendar to postane nekoliko bolj zapleteno, kadar so vpletene niti, zato bodite previdni pri uporabi na slepo.
  • $ / in $ \ - To sta ločila vhodnih in izhodnih zapisov. Ko berete predmete z uporabo dobi in jih natisnite z uporabo postavlja, jih uporablja, če ve, kdaj je prebran celoten "zapis" ali kaj natisniti med več zapisi. Privzeto bi to moral biti znak nove vrstice. Ker pa ti vplivajo na obnašanje vseh IO predmetov, se redko uporabljajo, če sploh. Morda jih boste videli v manjših scenarijih, kjer kršenje pravil za enkapsulacijo ni težava.
  • $? - Izhodni status zadnjega izvršenega podrejenega postopka. Od vseh naštetih spremenljivk je ta verjetno najbolj uporabna. Razlog za to je preprost: ne morete dobiti izhodnega stanja nadrejenih procesov z njihovo povratno vrednostjo iz sistem metoda, le resnična ali napačna. Če morate poznati dejansko povratno vrednost otroškega procesa, morate uporabiti to posebno globalno spremenljivko. Ponovno je ime te spremenljivke vzeto iz lupin UNIX.
  • $_ - Zadnji niz, ki ga je prebral dobi. Ta spremenljivka je lahko zmeda za tiste, ki v Ruby prihajajo s Perla. V Perlu, the spremenljivka $ _ pomeni nekaj podobnega, a povsem drugače. V Perlu oz. $_ ima vrednost zadnjega stavka, v Rubyju pa niz, ki ga je vrnil prejšnji dobi priklic. Njihova uporaba je podobna, toda tisto, kar resnično držijo, je zelo drugačno. Tudi te spremenljivke ne vidite pogosto (pomislite na to, redko vidite katero koli od teh spremenljivk), vendar jih lahko vidite v zelo kratkih Ruby programih, ki obdelujejo besedilo.

Skratka, le redko boste videli globalne spremenljivke. Pogosto so slabe forme (in "un-Ruby") in so resnično uporabne le v zelo majhnih scenarijih, kjer je mogoče celovito razumeti njihovo uporabo. Obstaja nekaj posebnih globalnih spremenljivk, ki pa se večinoma ne uporabljajo. Za razumevanje večine programov Ruby vam ni treba toliko vedeti o globalnih spremenljivkah, vendar morate vsaj vedeti, da so tam.

instagram story viewer