Ebben a cikkben a következő témákat fogjuk megvizsgálni:
- módszer hatókör
- osztály hatókör
Kezdés előtt
Örömömre szolgál, hogy megoszthatom önökkel legújabb projektünket: Fun Facts about Ruby – Volume 1
Kérem, nyugodtan terjessze és ossza meg ezt a bejegyzést! 🙏
Köszönjük, hogy időt szakítottál ránk!
A Rubyban a program hatókörének értéke erősen összefügg a self
értékével.
Itt részletezzük, hogy milyen értékeket vesz fel a self
, amikor egy metódusban, egy osztályban és a legfelső szintű hatókörben vagyunk.
Módszer hatókör
A Rubyban a legfelső szintű hatókör a main
objektum kontextusa.
A self
valóban a main
objektumra utal ebben a pillanatban.
Nyugodtan olvassa el a Ruby Object Model cikket, ha nem ismeri a
main
objektumot.
Most, mi a self
kontextusa a legfelső szintű hatókörben definiált metóduson belül?
Itt láthatjuk, hogy a self
szintén a main
objektumra utal.
A különbség csak annyi, hogy a mi metódusunkon belül nincs hozzáférésünk a legfelső szintű hatókörben deklarált helyi változókhoz.
Ez annak köszönhető, hogy a def
kulcsszó egy teljesen elszigetelt hatókörbe ágyazza a metódus tartalmát.
Módszerünk azonban hozzáférhet a felső szintű hatókörben deklarált példányváltozókhoz.
Mert mivel a példányváltozókat objektumszinten deklaráljuk, akkor hozzáférhetünk ezekhez a változókhoz egy másik hatókörben, ahol a self
ugyanarra az objektumra – esetünkben a main
objektumra – utal.
Mivel tehát a self
a main
-re mutat akár a felső szintű hatókörben, akár a felső szintű hatókörben definiált metódusban, a @instance_variable
példányváltozót a hello
metódusban elérhetjük.
osztály hatókör
Ha a class
kulcsszót használjuk:
- A
self
értéke megváltozik - Az osztály tartalma egy izolált hatókörbe van beágyazva
Nézzük meg a következő példát
Itt láthatjuk, hogy az osztályunkban self
más értékkel rendelkezik – a Hello
osztályra utal.
Ezeken kívül nincs hozzáférésünk az osztályon kívül definiált változókhoz és metódusokhoz.
Megjegyezzük, hogy a példányváltozókhoz a példánymetódusokban ugyanezen okok miatt van hozzáférésünk, amelyeket a cikk első részében leírtunk.
A második & III. részben modulok, egymásba ágyazott osztályok és blokkok (FLAT SCOPES) használatával fogunk játszani a hatókörökkel.
Voilà !