Globaalsed muutujad rubiinis

Globaalsed muutujad on muutujad millele pääseb juurde kõikjal programmis, olenemata ulatusest. Neid tähistatakse tähega $ (dollarimärk) alustades. Globaalsete muutujate kasutamist peetakse sageli "rubiinita" ja te näete neid harva.

Globaalsete muutujate määratlemine

Globaalseid muutujaid määratletakse ja kasutatakse nagu kõiki muid muutujaid. Nende määratlemiseks määrake neile lihtsalt väärtus ja hakake neid kasutama. Kuid nagu nende nimigi ütleb, on globaalsetele muutujatele määramine programmi mis tahes punktist ülemaailmne. Järgmine programm näitab seda. Meetod muudab globaalset muutujat ja see mõjutab seda, kuidas teine meetod jookseb.


$ kiirus = 10. def kiirendada. $ kiirus = 100. lõpp. def pass_speed_trap. kui $ kiirus> 65. # Andke programmile kiiruseületamise pilet. lõpp. lõpp. kiirendama. pass_speed_trap. 

Ebapopulaarne

Miks on see "un-Ruby" ja miks te ei näe globaalseid muutujaid väga sageli? Lihtsamalt öeldes rikub see kapseldumise. Kui mõni klass või meetod saab globaalsete muutujate olekut soovi korral muuta ilma liidesekihita, siis ükskõik millise teised klassid või meetodid, mis tuginevad sellele globaalsele muutujale, võivad käituda ootamatult ja ebasoovitavalt viisil. Lisaks võib selliseid interaktsioone olla väga raske siluda. Mis muutis seda globaalset muutujat ja millal? Kui otsite, mis seda tegi, uurite üsna palju koode ja seda oleks saanud vältida kapseldamisreeglite rikkumisega.

instagram viewer

Kuid see ei tähenda, et globaalsed muutujad on mitte kunagi kasutatud Ruby. Seal on mitmeid spetsiaalseid globaalseid muutujaid ühe tähemärgiga nimedega (a-la Perl), mida saab kasutada kogu teie programmi jooksul. Need tähistavad programmi enda olekut ja muudavad näiteks kõigi kirjete ja väljade eraldajaid saab meetodid.

Globaalsed muutujad

  • $0 - See muutuja, mida tähistatakse numbriga 0 (see on null), hoiab täidetava tipptasemel skripti nime. Teisisõnu, skriptifail, mida käivitati saidilt käsurida, mitte skriptifail, mis hoiab praegu käivitatavat koodi. Niisiis, kui skript1.rb käivitati käsurealt, see peaks vastu skript1.rb. Kui see skript nõuab skript2.rb, Oleks ka skriptifailis 0 dollarit skript1.rb. Nimi $ 0 peegeldab nimetamise tava, mida kasutatakse samal eesmärgil UNIX-i kesta skriptimisel.
  • $* - Massiivis käsuridade argumendid, mida tähistatakse tärnidega $ * (dollarimärk ja tärn). Näiteks kui peaksite jooksma ./script.rb arg1 arg2, siis $ * oleks samaväärne % w {arg1 arg2}. See on samaväärne erilisega ARGV massiiv ja sellel on vähem kirjeldav nimi, seega kasutatakse seda harva.
  • $$ - tõlgi protsessi ID, mida tähistatakse tähega $$ (kaks dollarimärki). Enda protsessi ID tundmine on sageli kasulik deemoniprogrammides (mis töötavad taustal, mis pole ühestki terminalist ühendatud) või süsteemiteenustes. Kui lõimedega on tegemist, läheb see pisut keerukamaks, nii et ole pimesi kasutamisel ettevaatlik.
  • $ / ja $ \ - Need on sisendi ja väljundi kirje eraldajad. Kui loete objekte kasutades saab ja printige need kasutades paneb, kasutab see neid, et teada saada, millal täielik "kirje" on läbi loetud või mida mitme kirje vahel printida. Vaikimisi peaks see olema uue rea märk. Kuid kuna need mõjutavad kõigi IO-objektide käitumist, kasutatakse neid harva, kui üldse. Võite neid näha väiksemates skriptides, kus kapseldamisreeglite rikkumine pole probleem.
  • $? - viimati teostatud järelprotsessi väljumise olek. Kõigist siin loetletud muutujatest on see ilmselt kõige kasulikum. Selle põhjus on lihtne: alamprotsesside väljumise olekut nende tagasiväärtuse järgi ei saa süsteem meetod, ainult tõene või vale. Kui peate teadma lapseprotsessi tegelikku tagastamisväärtust, peate kasutama seda spetsiaalset globaalset muutujat. Selle muutuja nimi on jällegi võetud UNIX-i kestadest.
  • $_ - viimane string, mida luges saab. See muutuja võib olla segaduspunkt neile, kes tulevad Perlist Rubysse. Perlis $ _ muutuja tähendab midagi sarnast, kuid täiesti erinevat. Perlis $_ hoiab viimase avalduse väärtust ja rubiinides hoiab see eelmise tagastatud stringi saab kutsumine. Nende kasutamine on sarnane, kuid see, mida nad tegelikult omavad, on väga erinev. Te ei näe seda muutujat sageli (mõelge sellele, näete harva mõnda neist muutujatest), kuid võite neid näha väga lühikestes teksti töötlevates Ruby-programmides.

Ühesõnaga, harva näete globaalseid muutujaid. Need on sageli halvas vormis (ja "un-rubiin") ning on tõesti väga kasulikud ainult väga väikestes skriptides, kus nende kasutamise täielikku mõju saab täielikult mõista. Seal on mõned spetsiaalsed globaalsed muutujad, mida saab kasutada, kuid enamasti neid ei kasutata. Enamiku Ruby programmide mõistmiseks ei pea te tegelikult kõike nii palju teadma globaalsete muutujate kohta, kuid peaksite vähemalt teadma, et need on olemas.

instagram story viewer