L’oggetto ENV in Ruby
In questo articolo esploreremo i seguenti argomenti:
- l’oggetto
ENV
-
ENV
e le funzioni della libreria standard -
ENV
dietro la scena
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!
ENV
fornisce un’API per manipolare le variabili d’ambiente.
Attendendo come un Hash
, fornisce un insieme di metodi per aggiungere, cambiare, cancellare e accedere alle variabili d’ambiente che è decisamente Ruby-friendly
Nell’esempio precedente possiamo vedere un breve uso dell’API:
- 001- impostiamo il valore
'cool!'
alla variabile d’ambienteAN_ENV_VARIABLE
usando il metodoENV.=
- 002- poi accediamo al valore di
AN_ENV_VARIABLE
usando il metodoENV.
- 003- modifichiamo il valore di
AN_ENV_VARIABLE
in'great!'
usando il metodoENV.=
- 004- cancelliamo la variabile d’ambiente
AN_ENV_VARIABLE
usando il metodoENV.delete
- 005- proviamo ad accedere a
AN_ENV_VARIABLE
e forniamo un valore di default se non esiste usando il metodoENV.fetch
Che figata! Ma dove sono le variabili d’ambiente del sistema?
ENV e le funzioni della libreria standard
L’oggetto ENV
si basa sulle funzioni della libreria standard C per gestire le variabili d’ambiente.
Per esempio, quando chiami il metodo ENV.
, Ruby chiama la funzione di libreria standard C appropriata a seconda del tuo sistema operativo – getenv(3)
per i sistemi operativi unix-like, per esempio – per recuperare la variabile d’ambiente appropriata.
Questo sistema è efficiente e si basa su una forte libreria standard.
Inoltre, si accede solo alle variabili d’ambiente manipolate a runtime. Non ci sono variabili d’ambiente precaricate in memoria all’avvio del programma Ruby.
Ora diamo un’occhiata a come ENV
è implementato dietro la scena.
ENV dietro la scena
ENV
è un oggetto hash-like. Questo significa che è un’istanza di Object
e che ha un mucchio di metodi simili a un’istanza di Hash
.
irb> ENV.class
=> Object
Dietro la scena, l’oggetto ENV
ricodifica i metodi hash-like (come ENV
) per poter usare la famiglia di funzioni C *env(3). Quindi l’oggetto ENV
è solo un wrapper Ruby sulle funzioni C che sono incaricate di gestire le variabili d’ambiente
Inoltre, l’oggetto ENV
estende il modulo Enumerable
ma sovrascrive un mucchio di metodi di questo modulo come each
e each_pair
per esempio
irb> ENV.singleton_class.included_modules
=>
Per ricapitolare, ENV
è un’istanza “enumerabile” di Object
memorizzata in una costante globale.
Sentitevi liberi di consultare il file hash.c per ulteriori informazioni.
Voilà !