Objektet ENV i Ruby

apr 29, 2021
admin

Objektet ENV i Ruby
Mehdi Farsi

Follow

19. jul, 2018 – 3 min read

I denne artikel kommer vi til at udforske følgende emner:

  • ENVobjektet
  • ENV og standardbibliotekets funktioner
  • ENV bag scenen

Hvor man går i gang

Jeg er glad for at kunne dele vores seneste projekt med dig: Fun Facts about Ruby – Volume 1

Du er velkommen til at sprede budskabet og dele dette indlæg! 🙏

Tak for din tid!

ENV indeholder en API til at manipulere miljøvariabler.

Gennem at opføre sig som en Hash giver den et sæt metoder til at tilføje, ændre, slette og få adgang til miljøvariabler, som er absolut Ruby-venlig

I ovenstående eksempel kan vi se en kort brug af API’en:

  • 001- vi sætter værdien 'cool!' til miljøvariablen AN_ENV_VARIABLE ved hjælp af ENV.=-metoden
  • 002- derefter får vi adgang til værdien af AN_ENV_VARIABLE ved hjælp af ENV.-metoden
  • 003- vi ændrer værdien af AN_ENV_VARIABLE til 'great!' ved hjælp af ENV.=-metoden
  • 004- vi sletter AN_ENV_VARIABLE-miljøvariablen ved hjælp af ENV.delete-metoden
  • 005- vi forsøger at få adgang til AN_ENV_VARIABLE, og vi giver en standardværdi, hvis den ikke findes, ved hjælp af ENV.fetch-metoden

Det er fedt ! Men hvor er systemets miljøvariabler?

ENV og standardbibliotekets funktioner

Objektet ENV er afhængig af C standardbibliotekets funktioner til at administrere miljøvariablerne.

For eksempel, når du kalder ENV.-metoden, kalder Ruby den relevante C standardbiblioteksfunktion afhængigt af dit operativsystem – getenv(3) for unix-lignende operativsystemer for eksempel – for at hente den relevante miljøvariabel.

Dette system er effektivt og er afhængig af et stærkt standardbibliotek.

Der er desuden kun adgang til de manipulerede miljøvariabler på køretid. Der er ingen miljøvariabler preloaded i hukommelsen ved opstart af Ruby-programmet.

Så, lad os nu se på, hvordan ENV er implementeret bag scenen.

ENV bag scenen

ENV er et hash-lignende objekt. Det betyder, at det er en instans af Object, og at det har en række metoder, der ligner en instans af Hash.

irb> ENV.class
=> Object

Hinter scenen omkoder ENV-objektet de hash-lignende metoder (som ENV) for at kunne bruge *env(3)-C-funktionsfamilien. Så ENV-objektet er blot en Ruby-wrapper på C-funktioner, der står for forvaltningen af miljøvariablerne

Dertil kommer, at ENV-objektet udvider Enumerable-modulet, men overskriver en masse metoder i dette modul som each og each_pair for eksempel

irb> ENV.singleton_class.included_modules
=>

For at opsummere, er ENV en “opregneligt” eksempel på Object gemt i en global konstant.

Føl dig fri til at gennemse hash.c-filen for yderligere oplysninger.

Voilà !

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.