În acest articol, vom explora următoarele subiecte:
Înainte de a începe
Sunt încântat să vă împărtășesc cel mai recent proiect al nostru: Fun Facts about Ruby – Volume 1
Vă rugăm să nu ezitați să răspândiți vestea și să distribuiți această postare! 🙏
Mulțumim pentru timpul acordat!
În Ruby, domeniul de aplicare al unui program este strâns corelat cu valoarea lui self
.
Aici vom detalia care sunt valorile lui self
atunci când ne aflăm într-o metodă, într-o clasă și în domeniul de aplicare de nivel superior.
Scopul metodei
În Ruby, domeniul de nivel superior este contextul obiectului main
.
De fapt, self
se referă la obiectul main
în acest moment.
Nu ezitați să citiți articolul Ruby Object Model dacă nu sunteți familiarizați cu obiectul
main
.
Acum, care este contextul lui self
în cadrul unei metode definite în domeniul de aplicare de nivel superior?
Aici putem vedea că self
se referă, de asemenea, la obiectul main
.
Singura diferență este că noi nu avem acces la variabilele locale declarate în domeniul de aplicare de nivel superior în cadrul metodei noastre.
Aceasta se datorează faptului că cuvântul cheie def
înglobează conținutul metodei într-un domeniu de aplicare complet izolat.
Cu toate acestea, metoda noastră poate accesa variabilele de instanță declarate în domeniul de aplicare de nivel superior.
De fapt, deoarece variabilele de instanță sunt declarate la nivel de obiect, atunci putem accesa aceste variabile într-un alt domeniu de aplicare în care self
se referă la același obiect – obiectul main
în cazul nostru.
Deci, deoarece self
indică main
fie în domeniul de aplicare de nivel superior, fie în metoda definită în domeniul de aplicare de nivel superior, putem accesa variabila de instanță @instance_variable
în metoda hello
.
Class scope
Când folosim cuvântul cheie class
:
- Valoarea lui
self
se schimbă - Conținutul clasei este încorporat într-un domeniu izolat
Să ne uităm la următorul exemplu
Aici putem vedea că în clasa noastră self
are o valoare diferită – se referă la clasa Hello
.
De asemenea, nu avem acces la variabilele și metodele definite în afara clasei.
Rețineți că avem acces la variabilele de instanță în metodele de instanță din aceleași motive descrise în prima secțiune a articolului.
În partea a II-a & a III-a, ne vom juca cu domeniile de cuprindere folosind module, clase imbricate și blocuri (FLAT SCOPES).
Voilà !