Scope gates Ruby-ban: I. rész

Mehdi Farsi

Follow

Sep 2, 2019 – 3 min read

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à !

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.