Scope gates i Ruby: Del I

Mehdi Farsi

Follow

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.