2. sep, 2019 – 3 min read
I denne artikel vil vi undersøge følgende emner:
metode scope
klasse scope
Hvor vi går i gang
Jeg er glad for at dele vores seneste projekt med dig: Fun Facts about Ruby – Volume 1
Du er velkommen til at sprede budskabet og dele dette indlæg! 🙏
Tak for din tid!
I Ruby er et programs scope stærkt korreleret med værdien af self
.
Her vil vi i detaljer beskrive, hvad værdierne af self
er, når vi befinder os i en metode, en klasse og i top-level scope.
Method scope
I Ruby er top-level scope konteksten for main
-objektet.
I dette øjeblik refererer self
til main
-objektet.
Føl dig velkommen til at læse artiklen Ruby Object Model, hvis du ikke er bekendt main
-objektet.
Nu, hvad er konteksten for self
inden for en metode, der er defineret i top-level scope?
Her kan vi se, at self
også henviser til main
-objektet.
Den eneste forskel er, at vi ikke har adgang til lokale variabler, der er deklareret i top-level scope, inden for vores metode.
Dette skyldes, at nøgleordet def
indlejrer metodens indhold i et helt isoleret scope.
Derimod kan vores metode få adgang til instansvariabler, der er deklareret i topniveau-scopet.
Da instansvariabler er deklareret på objektniveau, kan vi nemlig få adgang til disse variabler i et andet scope, hvor self
henviser til det samme objekt – i vores tilfælde main
-objektet.
Så da self
peger på main
i enten topniveau-scopet og i den metode, der er defineret i topniveau-scopet, kan vi få adgang til @instance_variable
-instansvariablen i hello
-metoden.
Class scope
Når vi bruger nøgleordet class
:
Værdien af self
ændres
Indholdet af klassen er indlejret i et isoleret scope
Lad os se på følgende eksempel
Her kan vi se, at i vores klasse har self
en anden værdi – den refererer til Hello
-klassen.
Også har vi ikke adgang til variabler og metoder, der er defineret uden for klassen.
Bemærk, at vi har adgang til instansvariabler i instansmetoder af de samme grunde, som er beskrevet i artiklens første afsnit.
I del II & III skal vi lege med scopes ved at bruge moduler, indlejrede klasser og blokke (FLAT SCOPES).
Voilà !