L’oggetto ENV in Ruby

Apr 29, 2021
admin

L’oggetto ENV in Ruby
Mehdi Farsi

Follow

Jul 19, 2018 – 3 min read

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’ambiente AN_ENV_VARIABLE usando il metodo ENV.=
  • 002- poi accediamo al valore di AN_ENV_VARIABLE usando il metodo ENV.
  • 003- modifichiamo il valore di AN_ENV_VARIABLE in 'great!' usando il metodo ENV.=
  • 004- cancelliamo la variabile d’ambiente AN_ENV_VARIABLE usando il metodo ENV.delete
  • 005- proviamo ad accedere a AN_ENV_VARIABLE e forniamo un valore di default se non esiste usando il metodo ENV.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à !

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.