Obsahové brány v jazyce Ruby: Část I

.

Mehdi Farsi

Sledovat

2. září, 2019 – 3 minuty čtení

V tomto článku se budeme zabývat následujícími tématy:

  • obsah metody
  • obsah třídy

Před začátkem

S radostí se s vámi podělím o náš nejnovější projekt: Zábavná fakta o Ruby – 1. díl

Prosím, neváhejte a sdílejte tento příspěvek! 🙏

Děkuji vám za váš čas!

V jazyce Ruby je rozsah programu silně spjat s hodnotou self.

Podrobně si zde popíšeme, jaké jsou hodnoty self, když jsme v metodě, třídě a v rozsahu nejvyšší úrovně.

Obsah metody

V jazyce Ruby je obor nejvyšší úrovně kontextem objektu main.

V tomto okamžiku se self vztahuje k objektu main.

Pokud objekt main neznáte, neváhejte si přečíst článek Objektový model jazyka Ruby.

Jaký je nyní kontext self v rámci metody definované v oboru nejvyšší úrovně?“

Tady vidíme, že self také odkazuje na objekt main.

Rozdíl je pouze v tom, že v rámci naší metody nemáme přístup k lokálním proměnným deklarovaným v oboru nejvyšší úrovně.

To je způsobeno tím, že klíčové slovo def vkládá obsah metody do zcela izolovaného oboru.

Naše metoda však může přistupovat k instančním proměnným deklarovaným v oboru nejvyšší úrovně.

Jelikož jsou instanční proměnné deklarovány na úrovni objektu, pak můžeme k těmto proměnným přistupovat v jiném oboru, kde self odkazuje na stejný objekt – v našem případě na objekt main.

Jelikož tedy self odkazuje na main buď v oboru nejvyšší úrovně, nebo v metodě definované v oboru nejvyšší úrovně, můžeme v metodě hello přistupovat k instanční proměnné @instance_variable.

Obsah třídy

Když použijeme klíčové slovo class:

  • Hodnota self se změní
  • Obsah třídy je vložen do izolovaného oboru

Podívejme se na následující příklad

Zde vidíme, že v naší třídě má self jinou hodnotu – odkazuje na třídu Hello.

Také nemáme přístup k proměnným a metodám definovaným mimo třídu.

Všimněte si, že máme přístup k instančním proměnným v instančních metodách ze stejných důvodů, které byly popsány v první části článku.

V části II & III si budeme hrát s rozsahy pomocí modulů, vnořených tříd a bloků (FLAT SCOPES).

Voilà !

Voilà !

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.