ENV-olio Rubyssä

huhti 29, 2021
admin
ENV-olio Ruby
Mehdi Farsi

Follow

Jul 19,

  • Objekti ENV
  • ENV ja standardikirjaston funktiot
  • ENV kulissien takana

Ennen aloittamista

Olen innoissani voidessani jakaa kanssasi uusimman projektimme: Fun Facts about Ruby – Volume 1

Kannattaa levittää sanaa ja jakaa tätä viestiä! 🙏

Kiitos ajastasi!

ENV tarjoaa API:n ympäristömuuttujien käsittelyyn.

Toimimalla kuin Hash se tarjoaa joukon metodeja ympäristömuuttujien lisäämiseen, muuttamiseen, poistamiseen ja käyttämiseen, mikä on ehdottomasti Ruby-ystävällistä

Yllä olevassa esimerkissä näemme API:n lyhyen käytön:

  • 001- asetamme 'cool!' arvon ympäristömuuttujalle AN_ENV_VARIABLE käyttäen ENV.= metodia
  • 002- sitten pääsemme käsiksi AN_ENV_VARIABLE arvoon käyttäen ENV. metodia
  • 003- muutamme AN_ENV_VARIABLE arvon 'great!':ksi käyttäen ENV.= metodia
  • 004- poistamme ympäristömuuttujan AN_ENV_VARIABLE käyttämällä metodia ENV.delete
  • 005- yritämme käyttää muuttujaa AN_ENV_VARIABLE ja annamme oletusarvon, jos sitä ei ole olemassa, käyttämällä metodia ENV.fetch

Tämä on siistiä ! Mutta missä ovat järjestelmän ympäristömuuttujat?

ENV ja standardikirjaston funktiot

Objekti ENV luottaa C-standardikirjaston funktioihin ympäristömuuttujien hallinnassa.

Kun esimerkiksi kutsut ENV.-metodia, niin Ruby kutsuu sopivaa C-standardikirjaston funktiota käyttöjärjestelmästäsi riippuen – getenv(3) esimerkiksi unix-tyyppisille käyttöjärjestelmille – noutamaan sopivan ympäristömuuttujan.

Tämä järjestelmä on tehokas ja luottaa vahvaan standardikirjastoon.

Lisäksi vain ajoaikana manipuloituja ympäristömuuttujia käytetään. Ympäristömuuttujia ei ole esiladattu muistiin Ruby-ohjelman käynnistyessä.

Katsotaan nyt, miten ENV on toteutettu kulissien takana.

ENV kulissien takana

ENV on hash-tyyppinen objekti. Tämä tarkoittaa, että se on Object:n instanssi ja että sillä on joukko metodeja, jotka ovat samanlaisia kuin Hash:n instanssilla.

irb> ENV.class
=> Object

Kohtauksen takana ENV-olio koodaa hash:n kaltaiset metodit uudelleen (kuten ENV) käyttääkseen *env(3) C-funktioperhettä. ENV-objekti on siis vain Rubyn kääre C-funktioille, jotka vastaavat ympäristömuuttujien hallinnasta

Seuraavasti ENV-objekti laajentaa Enumerable-moduulia, mutta ohittaa joukon tämän moduulin metodeja, kuten esimerkiksi each ja each_pair

irb> ENV.singleton_class.included_modules
=>

Yhteenvetona voidaan todeta, että ENV on globaalissa vakiossa tallennettu ”lueteltava” instanssi Object:sta.

Voi vapaasti selata hash.c-tiedostoa lisätietoja varten.

Voilà !

Vastaa

Sähköpostiosoitettasi ei julkaista.