Globālie mainīgie ir mainīgie kam var piekļūt no jebkuras programmas vietas neatkarīgi no darbības jomas. Tos apzīmē, sākot ar USD (dolāra zīmes) rakstzīmi. Tomēr globālo mainīgo izmantošanu bieži uzskata par “ne-rubīnu”, un jūs tos reti redzēsit.
Globālo mainīgo definēšana
Globālie mainīgie tiek definēti un izmantoti tāpat kā jebkurš cits mainīgais. Lai tos definētu, vienkārši piešķiriet viņiem vērtību un sāciet tos lietot. Bet, kā norāda viņu nosaukums, piešķiršana globālajiem mainīgajiem no jebkura programmas punkta ietekmē globāli. To parāda šī programma. Metode modificēs globālo mainīgo, un tas ietekmēs to, kā otrais metode darbojas.
USD ātrums = 10. def paātrināt. USD ātrums = 100. beigas. def pass_speed_trap. ja $ ātrums> 65. # Piešķiriet programmai ātruma pārsniegšanas biļeti. beigas. beigas. paātrināt. pass_speed_trap.
Nepopulārs
Tad kāpēc ir šis “bez rubīna” un kāpēc globālos mainīgos neredzat ļoti bieži? Vienkārši sakot, tas sabojā iekapsulēšanu. Ja kāda klase vai metode var modificēt globālo mainīgo stāvokli pēc vēlēšanās bez interfeisa slāņa, tad jebkura citas klases vai metodes, kas balstās uz šo globālo mainīgo, var izturēties negaidīti un nevēlami manierē. Turklāt šādas mijiedarbības var būt ļoti grūti atkļūdot. Kas un kad mainīja šo globālo mainīgo? Jūs meklēsit diezgan daudz kodu, lai atrastu, kas to izdarīja, un no tā varēja izvairīties, nepārkāpjot iekapsulēšanas noteikumus.
Bet tas nenozīmē, ka globālie mainīgie ir nekad izmantots Rubīnā. Ir virkne īpašu globālo mainīgo ar vienu rakstzīmju nosaukumiem (a-la Perls), ko var izmantot visā jūsu programmā. Viņi attēlo pašas programmas stāvokli un dara visu, piemēram, maina visu ierakstu un lauku atdalītājus izpaužas metodes.
Globālie mainīgie
- $0 - Šis mainīgais, kas apzīmēts ar USD 0 (tas ir nulle), satur izpildītā augstākā līmeņa skripta nosaukumu. Citiem vārdiem sakot, skripta fails, kas tika palaists no komandrinda, nevis skripta fails, kurā atrodas pašreiz izpildošais kods. Tātad ja skripts1.rb tika palaists no komandrindas, tas turēsies skripts1.rb. Ja šis skripts prasa skripts2.rb, Arī 0 USD šajā skripta failā būtu skripts1.rb. Nosaukums $ 0 atspoguļo nosaukšanas konvenciju, ko tajā pašā nolūkā izmanto UNIX čaulas skriptā.
- $* - Komandrindas argumenti masīvā, kas apzīmēts ar * * (dolāra zīme un zvaigznīte). Piemēram, ja jums būtu jāskrien ./script.rb arg1 arg2, tad $ * būtu līdzvērtīgs % w {arg1 arg2}. Tas ir līdzvērtīgs īpašajam ARGV masīvs un tam ir mazāk aprakstošs nosaukums, tāpēc tas tiek reti izmantots.
- $$ - tulka procesa ID, ko apzīmē ar USD $ (divas dolāra zīmes). Zināt sava procesa ID bieži ir noderīgi dēmonu programmās (kas darbojas fonā, nepievienotas no jebkura termināļa) vai sistēmas pakalpojumos. Tomēr tas kļūst nedaudz sarežģītāk, ja tiek iesaistīti pavedieni, tāpēc esiet piesardzīgs, izmantojot to akli.
- $ / un $ \ - Tie ir ievades un izvades ierakstu atdalītāji. Kad jūs lasāt objektus, izmantojot izpaužas un izdrukājiet tos, izmantojot liek, tas tos izmanto, lai zinātu, kad ir izlasīts viss "ieraksts" vai ko drukāt starp vairākiem ierakstiem. Pēc noklusējuma tiem jābūt jaunrindas rakstzīmei. Bet, tā kā tie ietekmē visu IO objektu izturēšanos, tos reti izmanto, ja vispār. Jūs tos varat redzēt mazākos skriptos, kur iekapsulēšanas noteikumu pārkāpšana nav problēma.
- $? - pēdējā izpildītā procesa izejas statuss. No visiem šeit uzskaitītajiem mainīgajiem tas, iespējams, ir visnoderīgākais. Iemesls tam ir vienkāršs: jūs nevarat iegūt bērnu procesu izejas statusu pēc to atgriešanās vērtības no sistēma metode, tikai patiesa vai nepatiesa. Ja jums jāzina bērna procesa faktiskā atgriešanās vērtība, jums jāizmanto šis īpašais globālais mainīgais. Atkal šī mainīgā nosaukums tiek ņemts no UNIX čaumalām.
- $_ - pēdējā virkne, kuru lasīja izpaužas. Šis mainīgais var radīt neskaidrības tiem, kas ierodas Rubīnā no Perlas. Perlā $ _ mainīgais nozīmē kaut ko līdzīgu, bet pilnīgi atšķirīgu. Perlā, $_ tur pēdējā paziņojuma vērtību, un rubīnā tas satur iepriekšējā atgriezto virkni izpaužas piesaukšana. Viņu lietojums ir līdzīgs, taču tas, ko viņi patiesībā tur, ir ļoti atšķirīgs. Arī jūs bieži neredzat šo mainīgo (domājiet par to, reti redzat kādu no šiem mainīgajiem), taču jūs tos varat redzēt ļoti īsās Ruby programmās, kas apstrādā tekstu.
Īsāk sakot, reti redzēsit globālos mainīgos. Bieži vien tie ir sliktā formā (un “bez rubīna”) un ir ļoti noderīgi tikai ļoti mazos skriptos, kur var pilnībā novērtēt to izmantošanas nozīmi. Ir daži īpaši izmantojami globālie mainīgie, taču lielākoties tie netiek izmantoti. Jums patiesībā nav jāzina tik daudz par globālajiem mainīgajiem, lai saprastu lielāko daļu Ruby programmu, taču jums vismaz jāzina, ka tie ir tur.