Scope-portit Rubyssä: Osa I

Mehdi Farsi

Seuraa

2. syyskuuta, 2019 – 3 min read

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

Vastaa

Sähköpostiosoitettasi ei julkaista.