Scope poorten in Ruby: Deel I

Mehdi Farsi

Follow

2 sep, 2019 – 3 min read

In dit artikel gaan we in op de volgende onderwerpen:

  • method scope
  • class scope

Voordat we beginnen

Ik ben verheugd om ons nieuwste project met jullie te delen: Leuke weetjes over Ruby – Deel 1

Gelieve je vrij te voelen om het woord te verspreiden en deze post te delen! Dank u voor uw tijd!

In Ruby is de scope van een programma sterk gecorreleerd aan de waarde van self.

Hier gaan we in detail bekijken wat de waarden van self zijn als we in een methode, een klasse en in de top-level scope zijn.

Method scope

In Ruby is de top-level scope de context van het main object.

Op dit moment verwijst self naar het main object.

Voel je vrij om het Ruby Object Model artikel te lezen als je niet bekend bent met het main object.

Nu, wat is de context van self binnen een methode die is gedefinieerd in het top-level bereik?

Hier kunnen we zien dat self ook verwijst naar het main object.

Het enige verschil is dat we geen toegang hebben tot lokale variabelen die zijn gedeclareerd in het top-level bereik binnen onze methode.

Dit is te wijten aan het feit dat het def sleutelwoord de inhoud van de methode in een volledig geïsoleerd bereik insluit.

Hoewel, onze methode heeft toegang tot instantievariabelen die in het top-level bereik zijn gedeclareerd.

Inderdaad, omdat instance-variabelen worden gedeclareerd op objectniveau, kunnen we toegang krijgen tot deze variabelen in een ander bereik waar self verwijst naar hetzelfde object – het main-object in ons geval.

Dus, aangezien self verwijst naar main in zowel het top-level bereik als in de methode die is gedefinieerd in het top-level bereik, kunnen we toegang krijgen tot de @instance_variable-instance-variabele in de hello-methode.

Class scope

Wanneer we het class sleutelwoord gebruiken:

  • De waarde van self verandert
  • De inhoud van de klasse wordt ingebed in een geïsoleerde scope

Laten we eens kijken naar het volgende voorbeeld

Hier kunnen we zien dat in onze klasse self een andere waarde heeft – het verwijst naar de Hello klasse.

Ook hebben we geen toegang tot variabelen en methoden die buiten de klasse zijn gedefinieerd.

Merk op dat we toegang hebben tot instantievariabelen in instantiemethoden om dezelfde redenen die in het eerste deel van het artikel zijn beschreven.

In deel II & III gaan we spelen met scopes door gebruik te maken van modules, geneste klassen, en blokken (FLAT SCOPES).

Voilà !

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.