Objektet ENV i Ruby
I denne artikel kommer vi til at udforske følgende emner:
-
ENV
objektet -
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øvariablenAN_ENV_VARIABLE
ved hjælp afENV.=
-metoden - 002- derefter får vi adgang til værdien af
AN_ENV_VARIABLE
ved hjælp afENV.
-metoden - 003- vi ændrer værdien af
AN_ENV_VARIABLE
til'great!'
ved hjælp afENV.=
-metoden - 004- vi sletter
AN_ENV_VARIABLE
-miljøvariablen ved hjælp afENV.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 afENV.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à !