Env-objektet i Ruby
I denna artikel kommer vi att utforska följande ämnen:
- Objektet
ENV
-
ENV
och standardbibliotekets funktioner -
ENV
bakom scenen
För att börja
Jag är glad att kunna dela med mig av vårt senaste projekt: Fun Facts about Ruby – Volume 1
Du får gärna sprida ordet och dela det här inlägget! 🙏
Tack för din tid!
ENV
tillhandahåller ett API för att manipulera miljövariabler.
Då det fungerar som en Hash
, tillhandahåller det en uppsättning metoder för att lägga till, ändra, ta bort och få tillgång till miljövariabler som definitivt är Ruby-vänliga
I exemplet ovan kan vi se en kort användning av API:et:
- 001- vi ställer in värdet
'cool!'
på miljövariabelnAN_ENV_VARIABLE
med hjälp avENV.=
metoden - 002- sedan får vi tillgång till värdet på
AN_ENV_VARIABLE
med hjälp avENV.
metoden - 003- vi ändrar värdet på
AN_ENV_VARIABLE
till'great!'
med hjälp avENV.=
metoden - 004- Vi raderar miljövariabeln
AN_ENV_VARIABLE
med hjälp av metodenENV.delete
- 005- Vi försöker få tillgång till
AN_ENV_VARIABLE
och ger ett standardvärde om det inte finns med hjälp av metodenENV.fetch
Det är coolt! Men var finns systemets miljövariabler?
ENV och standardbibliotekets funktioner
Objektet ENV
förlitar sig på C:s standardbiblioteksfunktioner för att hantera miljövariablerna.
När du till exempel anropar ENV.
-metoden anropar Ruby lämplig funktion i C:s standardbibliotek beroende på ditt operativsystem – getenv(3)
för unix-liknande operativsystem till exempel – för att hämta lämplig miljövariabel.
Det här systemet är effektivt och förlitar sig på ett starkt standardbibliotek.
Det är dessutom bara de manipulerade miljövariablerna vid körning som nås. Det finns inga miljövariabler som förinstalleras i minnet vid start av Ruby-programmet.
Så, låt oss nu ta en titt på hur ENV
implementeras bakom scenen.
ENV bakom scenen
ENV
är ett hash-liknande objekt. Det betyder att det är en instans av Object
och att det har ett gäng metoder som liknar en instans av Hash
.
irb> ENV.class
=> Object
Här bakom scenen kodar ENV
-objektet om de hash-liknande metoderna (som ENV
) för att kunna använda C-funktionsfamiljen *env(3). Så ENV
-objektet är bara en Ruby-wrapper på C-funktioner som ansvarar för hanteringen av miljövariablerna
För övrigt utökar ENV
-objektet Enumerable
-modulen men åsidosätter ett gäng metoder i denna modul som each
och each_pair
till exempel
irb> ENV.singleton_class.included_modules
=>
För att sammanfatta är ENV
en ”uppräkningsbar” instans av Object
som lagras i en global konstant.
För ytterligare information får du gärna bläddra i filen hash.c.
Voilà !