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