Env-objektet i Ruby

apr 29, 2021
admin

Env-objektet i Ruby
Mehdi Farsi

Follow

19 juli, 2018 – 3 min read

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övariabeln AN_ENV_VARIABLE med hjälp av ENV.=metoden
  • 002- sedan får vi tillgång till värdet på AN_ENV_VARIABLE med hjälp av ENV.metoden
  • 003- vi ändrar värdet på AN_ENV_VARIABLE till 'great!' med hjälp av ENV.=metoden
  • 004- Vi raderar miljövariabeln AN_ENV_VARIABLE med hjälp av metoden ENV.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 metoden ENV.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à !

Lämna ett svar

Din e-postadress kommer inte publiceras.