ENV-olio Rubyssä
- 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ömuuttujalleAN_ENV_VARIABLE
käyttäenENV.=
metodia - 002- sitten pääsemme käsiksi
AN_ENV_VARIABLE
arvoon käyttäenENV.
metodia - 003- muutamme
AN_ENV_VARIABLE
arvon'great!'
:ksi käyttäenENV.=
metodia - 004- poistamme ympäristömuuttujan
AN_ENV_VARIABLE
käyttämällä metodiaENV.delete
- 005- yritämme käyttää muuttujaa
AN_ENV_VARIABLE
ja annamme oletusarvon, jos sitä ei ole olemassa, käyttämällä metodiaENV.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à !