Porta d’ambito in Ruby: Parte I

Mehdi Farsi

Follow

2 settembre, 2019 – 3 min read

In questo articolo, esploreremo i seguenti argomenti:

  • ambito del metodo
  • ambito della classe

Prima di iniziare

Sono entusiasta di condividere con voi il nostro ultimo progetto: Fun Facts about Ruby – Volume 1

Sentitevi liberi di spargere la voce e condividere questo post! 🙏

Grazie per il tuo tempo!

In Ruby, lo scopo di un programma è fortemente correlato al valore di self.

Qui andremo a dettagliare quali sono i valori di self quando siamo in un metodo, una classe e nello scopo di primo livello.

Scopo del metodo

In Ruby, lo scopo di primo livello è il contesto dell’oggetto main.

Infatti self si riferisce all’oggetto main in questo momento.

Sentitevi liberi di leggere l’articolo Ruby Object Model se non conoscete l’oggetto main.

Ora, qual è il contesto di self all’interno di un metodo definito nello scope di primo livello?

Qui possiamo vedere che self si riferisce anche all’oggetto main.

L’unica differenza è che non abbiamo accesso alle variabili locali dichiarate nello scope di primo livello nel nostro metodo.

Questo è dovuto al fatto che la parola chiave defincorpora il contenuto del metodo in uno scope completamente isolato.

Invece, il nostro metodo può accedere alle variabili di istanza dichiarate nello scope di primo livello.

Infatti, poiché le variabili di istanza sono dichiarate a livello di oggetto, possiamo accedere a queste variabili in un altro scope dove self si riferisce allo stesso oggetto – l’oggetto main nel nostro caso.

Quindi, poiché self punta a main sia nello scope di primo livello che nel metodo definito nello scope di primo livello, possiamo accedere alla variabile di istanza @instance_variable nel metodo hello.

Scopo della classe

Quando usiamo la parola chiave class:

  • Il valore di self cambia
  • Il contenuto della classe è incorporato in uno scope isolato

Diamo un’occhiata al seguente esempio

Qui possiamo vedere che nella nostra classe self ha un valore diverso – si riferisce alla classe Hello.

Inoltre non abbiamo accesso a variabili e metodi definiti al di fuori della classe.

Nota che abbiamo accesso alle variabili di istanza nei metodi di istanza per le stesse ragioni descritte nella prima sezione dell’articolo.

Nella Parte II & III, giocheremo con gli scope usando moduli, classi annidate e blocchi (FLAT SCOPES).

Voilà !

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.