Tämässä artikkelissa tutustumme seuraaviin aiheisiin:
- metodin laajuus
- luokan laajuus
Ennen aloitusta
Olen innoissani voidessani jakaa kanssasi uusimman projektimme: Fun Facts about Ruby – Volume 1
Kannattaa levittää sanaa ja jakaa tätä viestiä! 🙏
Kiitos ajastasi!
Rubyssä ohjelman laajuus korreloi vahvasti self
:n arvoon.
Tässä käymme yksityiskohtaisesti läpi, mitkä ovat self
:n arvot, kun olemme metodissa, luokassa ja ylätason laajuudessa.
Method scope
Rubyssä ylätason scope on main
-objektin konteksti.
Todellakin self
viittaa main
-objektiin tällä hetkellä.
Lue rohkeasti Rubyn objektimalli-artikkelia, jos
main
-objekti ei ole tuttu.
Nyt, mikä on self
:n konteksti metodin sisällä, joka on määritelty ylätason scope:ssa?
Tässä näemme, että self
viittaa myös main
-objektiin.
Ainoana erona on se, että metodissamme ei ole pääsyä ylimmän tason scope:ssa julistettuihin paikallisiin muuttujiin.
Tämä johtuu siitä, että avainsana def
upottaa metodin sisällön täysin eristettyyn scopeen.
Metodimme voi kuitenkin käyttää ylätason scopeen julistettuja instanssimuuttujia.
Koska instanssimuuttujat julistetaan objektitasolla, voimme käyttää näitä muuttujia toisessa scopeissa, jossa self
viittaa samaan objektiin – tapauksessamme main
-objektiin.
Koska siis self
osoittaa main
:iin joko ylimmän tason scopeissa ja metodissa, joka on määritelty ylimmän tason scopeissa, voimme käyttää @instance_variable
-instanssimuuttujaa hello
-metodissa.
Luokan scope
Kun käytämme avainsanaa class
:
- Luokan
self
arvo muuttuu - Luokan sisältö on upotettu eristettyyn scope
Katsotaanpa seuraavaa esimerkkiä
Tässä huomaamme, että luokassamme self
:llä on erilainen arvo – se viittaa Hello
-luokkaan.
Meillä ei myöskään ole pääsyä luokan ulkopuolella määriteltyihin muuttujiin ja metodeihin.
Huomaa, että meillä on pääsy instanssimuuttujiin instanssimetodeissa samoista syistä, jotka kuvattiin artikkelin ensimmäisessä osassa.
Tässä osassa II & III leikitellään laajuuksilla käyttämällä moduuleja, sisäkkäisiä luokkia ja lohkoja (FLAT SCOPES).
Voilà !