Globálne premenné sú premenné ktoré sú prístupné odkiaľkoľvek v programe bez ohľadu na rozsah. Označujú sa znakom $ (znak dolára). Použitie globálnych premenných sa však často považuje za „un-Ruby“ a zriedka ich uvidíte.
Definovanie globálnych premenných
Globálne premenné sú definované a používané ako každá iná premenná. Ak ich chcete definovať, jednoducho im priraďte hodnotu a začnite ich používať. Ako však už názov napovedá, priradenie globálnym premenným z ktoréhokoľvek bodu programu má globálne dôsledky. Nasledujúci program to demonštruje. Táto metóda zmení globálnu premennú a ovplyvní to, ako druhý metóda beží.
$ speed = 10. def akcelerovať. $ speed = 100. koniec. def pass_speed_trap. ak $ rýchlosť> 65. # Dajte programu lístok na prekročenie povolenej rýchlosti. koniec. koniec. urýchliť. pass_speed_trap.
nepopulárne
Prečo je to „un-Ruby“ a prečo nevidíte globálne premenné veľmi často? Zjednodušene povedané, rozbije sa zapuzdrenie. Ak ktorákoľvek trieda alebo metóda môže ľubovoľne modifikovať stav globálnych premenných bez vrstvy rozhrania iné triedy alebo metódy, ktoré sa spoliehajú na túto globálnu premennú, sa môžu správať neočakávane a nežiaduco spôsobom. Takéto interakcie môžu byť navyše veľmi ťažko laditeľné. Čo modifikovalo túto globálnu premennú a kedy? Budete hľadať dosť veľa kódu, aby ste zistili, čo to urobilo, a tomu sa dalo predísť porušením pravidiel enkapsulácie.
Ale to neznamená, že globálne premenné sú nikdy používa sa v Ruby. Existuje niekoľko špeciálnych globálnych premenných s jednoznakovými názvami (a-la perl), ktoré môžete použiť v celom svojom programe. Predstavujú stav samotného programu a robia veci ako modifikácie oddeľovačov záznamu a poľa pre všetkých dostane metódy.
Globálne premenné
- $0 - Táto premenná, označená 0 $ (to je nula), obsahuje názov vykonávaného skriptu najvyššej úrovne. Inými slovami, súbor skriptu, ktorý bol spustený z príkazový riadok, nie súbor skriptu, ktorý obsahuje aktuálne vykonávajúci kód. Takže, ak script1.rb bol spustený z príkazového riadku, bude to držať script1.rb. Ak tento skript vyžaduje script2.rb, 0 dolárov v tomto skriptovom súbore by tiež bolo script1.rb. Názov $ 0 odzrkadľuje konvenciu pomenovávania používanú v skriptoch shellu UNIX na ten istý účel.
- $* - Argumenty príkazového riadku v poli označené znakom $ * (znak dolára a hviezdička). Napríklad, ak ste mali bežať ./script.rb arg1 arg2, potom $ * by bolo rovnocenné % w {arg1 arg2}. Toto je rovnocenné so špeciálnymi argv a má menej popisný názov, preto sa používa zriedka.
- $$ - ID procesu tlmočníka označené $$ (dva znaky dolára). Poznanie vlastného ID procesu je často užitočné v démonových programoch (ktoré bežia na pozadí, nepripojené k akémukoľvek terminálu) alebo systémových službách. To sa však trochu komplikuje, keď sú zapojené vlákna, takže buďte opatrní pri slepom používaní.
- $ / a $ \ - Toto sú oddeľovače vstupných a výstupných záznamov. Keď čítate objekty pomocou dostane a vytlačte ich pomocou puts, používa ich na zistenie, kedy bol prečítaný celý „záznam“ alebo čo je potrebné vytlačiť medzi viacerými záznamami. V predvolenom nastavení by to mal byť znak nového riadku. Ale pretože tieto ovplyvňujú správanie všetkých objektov IO, používajú sa zriedka, ak vôbec. Môžete ich vidieť v menších skriptoch, kde nie je problémom porušovanie pravidiel zapuzdrenia.
- $? - Stav ukončenia posledného vykonaného podriadeného procesu. Zo všetkých tu uvedených premenných je to pravdepodobne najužitočnejšie. Dôvod je jednoduchý: nemôžete získať stav ukončenia podriadených procesov podľa ich návratovej hodnoty z systém metóda, iba true alebo false. Ak potrebujete poznať skutočnú návratovú hodnotu podriadeného procesu, musíte použiť túto špeciálnu globálnu premennú. Názov tejto premennej je opäť prevzatý z shellov UNIX.
- $_ - Posledný reťazec prečítaný používateľom dostane. Táto premenná môže byť zmätená pre tých, ktorí prichádzajú do Ruby z Perlu. V Perl, USA $ _ premenná znamená niečo podobné, ale úplne iné. V Perli $_ drží hodnotu posledného príkazu av Ruby drží reťazec vrátený predchádzajúcim dostane vyvolanie. Ich použitie je podobné, ale to, čo skutočne držia, je veľmi odlišné. Túto premennú často často nevidíte (premýšľajte o nej, zriedka vidíte niektorú z týchto premenných), môžete ju však vidieť vo veľmi krátkych programoch Ruby, ktoré spracúvajú text.
Stručne povedané, len zriedka uvidíte globálne premenné. Často sú zlou formou (a „un-Ruby“) a sú skutočne užitočné iba vo veľmi malých skriptoch, kde je možné plne oceniť plné dôsledky ich použitia. Existuje niekoľko špeciálnych globálnych premenných, ktoré sa dajú použiť, ale z väčšej časti sa nepoužívajú. Na pochopenie väčšiny programov Ruby nepotrebujete toho veľa o globálnych premenných, ale mali by ste aspoň vedieť, že sú tam.