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