A globális változók változók amelyek a program bárhonnan elérhetők, a terjedelmetől függetlenül. A dollár (dollár jel) karakterrel kezdődik. A globális változók használatát azonban gyakran "nem Rubin" -nek tekintik, és ritkán fogja látni őket.
Globális változók meghatározása
A globális változókat minden más változóhoz hasonlóan definiálják és használják. Meghatározásukhoz egyszerűen csak rendeljen értéket és kezdje el használni. De amint a neve is sugallja, a globális változókhoz való hozzárendelés a program bármely pontjáról globális következményekkel jár. A következő program ezt bizonyítja. A módszer módosítja a globális változót, és ez befolyásolja a második módszer fut.
$ sebesség = 10. def felgyorsítása. $ sebesség = 100. véget. def pass_speed_trap. ha a dollár sebessége> 65. # Adja meg a programnak egy gyorshajtójegyet. véget. véget. gyorsul. pass_speed_trap.
Népszerűtlen
Miért van ez az „un-Ruby”, és miért nem látja gyakran a globális változókat? Egyszerűen fogalmazva: megtöri a kapszulázást. Ha bármelyik osztály vagy módszer bármilyen módon módosíthatja a globális változók állapotát interfészréteg nélkül más, az adott globális változóra támaszkodó osztályok vagy módszerek váratlanul és nemkívánatosan viselkedhetnek módon. Ezen túlmenően az ilyen interakciókat nagyon nehéz lehet megkeresni. Mi módosította ezt a globális változót és mikor? Nagyon sok kódot fog átnézni, hogy megtalálja, mi történt, és ezt el lehetett volna kerülni azáltal, hogy megsértette a beágyazás szabályait.
De ez nem azt jelenti, hogy globális változók soha használt Ruby-ban. Számos speciális globális változó létezik egy karakteres nevekkel (a-la Perl), amely az egész programban felhasználható. Ők a program állapotát képviselik, és mindent megtesznek, mint például a rekord- és mező elválasztók módosítása jelentkeznek mód.
Globális változók
- $0 - Ez a változó, amelyet $ 0-val jelölnek (ez egy nulla), a végrehajtandó felső szintű szkript nevét tartalmazza. Más szavakkal, a parancsfájl, amelyet a parancs sor, nem a szkriptfájl, amely az éppen végrehajtó kódot tartalmazza. Tehát, ha script1.rb a parancssorból futtatta, akkor tartani fogja script1.rb. Ha ez a szkript megköveteli script2.rb, A szkriptfájlban 0 dollár is lesz script1.rb. A $ 0 név a UNIX shell parancsfájlokban ugyanazon célra használt elnevezési konvenciót tükrözi.
- $* - A * * -gal jelölt tömb parancssori argumentumai (dollárjel és csillag). Például, ha futni kellene ./script.rb arg1 arg2, akkor a $ * egyenértékű lesz % w {arg1 arg2}. Ez egyenértékű a különlegesnel ARGV tömb, és kevésbé leíró névvel rendelkezik, ezért ritkán használják.
- $$ - A tolmács folyamatazonosítója, amelyet $$ (két dollárjelet) jelöl. A saját folyamatazonosító ismerete gyakran hasznos démonprogramokban (amelyek háttérben futnak, és nincs csatlakoztatva bármelyik terminálhoz) vagy a rendszerszolgáltatásokban. Ez azonban egy kicsit bonyolultabbá válik, ha szálak vannak benne, ezért vigyázzon, ha vakon használja.
- $ / és $ \ - Ezek a bemeneti és a kimeneti rekord elválasztók. Amikor tárgyakat olvas a jelentkeznek és nyomtassa ki őket a helyezi, ezeket felhasználva megtudja, mikor olvasott el egy teljes "rekord", vagy hogy mit kell több rekord között kinyomtatni. Alapértelmezés szerint ezeknek az új sor karakternek kell lenniük. De mivel ezek befolyásolják az összes IO-objektum viselkedését, ritkán használják őket, ha egyáltalán. Előfordulhat, hogy kisebb szkriptekben látja őket, ahol a beágyazási szabályok megsértése nem jelent problémát.
- $? - Az utoljára végrehajtott gyermekfolyamat kilépési állapota. Az itt felsorolt változók közül ez talán a leghasznosabb. Ennek oka egyszerű: a gyermekfolyamatok kilépési állapotát nem kaphatja meg a visszatérési érték alapján rendszer módszer, csak igaz vagy hamis. Ha tudnia kell a gyermekfolyamat tényleges visszatérési értékét, akkor ezt a speciális globális változót kell használnia. A változó nevét ismét a UNIX héjakból vettük.
- $_ - Az utolsó húr, amelyet olvasta jelentkeznek. Ez a változó zavart okozhat azok számára, akik Perlből érkeznek Rubyba. Perlisben a $ _ változó valami hasonlót, de teljesen másikat jelent. Perlben, $_ tartja az utolsó utasítás értékét, és Ruby-ban az előző által visszaadott karakterláncot tartja jelentkeznek hívással. Használata hasonló, de valójában nagyon eltérő. Ezt a változót sem gyakran látja (gondolkodjon rajta, ritkán lát ilyen változókat), de nagyon rövid Ruby-programokban láthatja, amelyek feldolgozzák a szöveget.
Röviden: ritkán fog megjelenni a globális változók. Gyakran rossz formában vannak (és "un-Ruby"), és nagyon nagyon hasznosak csak nagyon kicsi forgatókönyvekben, ahol felhasználásuk teljes következménye teljes mértékben értékelhető. Van néhány speciális globális változó, amelyek felhasználhatók, de nagyrészt nem használják őket. Valójában nem kell annyit tudnia a globális változókról, hogy megértse a legtöbb Ruby programot, de legalább tudnia kell, hogy ott vannak.