Het ENV-object in Ruby
In dit artikel gaan we de volgende onderwerpen verkennen:
- het
ENV
object -
ENV
en de standaard bibliotheekfuncties -
ENV
achter de schermen
Voordat u begint
Ik ben verheugd om ons nieuwste project met u te delen: Leuke weetjes over Ruby – Deel 1
Voel je vrij om het woord te verspreiden en deel deze post!
Bedankt voor uw tijd!
ENV
biedt een API om omgevingsvariabelen te manipuleren.
Door zich te gedragen als een Hash
, biedt het een set methoden om omgevingsvariabelen toe te voegen, te wijzigen, te verwijderen en te benaderen die beslist Ruby-vriendelijk is
In het bovenstaande voorbeeld kunnen we een kort gebruik van de API zien:
- 001- we stellen de waarde
'cool!'
in op deAN_ENV_VARIABLE
omgevingsvariabele met behulp van deENV.=
methode - 002- dan krijgen we toegang tot de waarde van
AN_ENV_VARIABLE
met behulp van deENV.
methode - 003- we wijzigen de waarde van
AN_ENV_VARIABLE
in'great!'
met behulp van deENV.=
methode - 004- we verwijderen de
AN_ENV_VARIABLE
omgevingsvariabele met deENV.delete
methode - 005- we proberen toegang te krijgen tot
AN_ENV_VARIABLE
en we geven een standaardwaarde op als die niet bestaat met deENV.fetch
methode
Dat is cool! Maar waar zijn de systeem omgevingsvariabelen?
ENV en de standaard bibliotheek functies
Het ENV
object vertrouwt op de C standaard bibliotheek functies om de omgevingsvariabelen te beheren.
Wanneer u bijvoorbeeld de ENV.
methode aanroept, roept Ruby de juiste C standaard bibliotheek functie aan, afhankelijk van uw OS – getenv(3)
voor unix-achtige OS bijvoorbeeld – om de juiste omgevingsvariabele op te halen.
Dit systeem is efficiënt en vertrouwt op een sterke standaard bibliotheek.
Daarnaast worden alleen de gemanipuleerde omgevingsvariabelen tijdens runtime benaderd. Er worden geen omgevingsvariabelen vooraf in het geheugen geladen bij het opstarten van het Ruby-programma.
Zo, laten we nu eens kijken hoe ENV
achter de schermen is geïmplementeerd.
ENV achter de schermen
ENV
is een hash-achtig object. Dit betekent dat het een instantie is van Object
en dat het een aantal methoden heeft die lijken op een instantie van Hash
.
irb> ENV.class
=> Object
In de scene hercodeert het ENV
object de hash-achtige methoden (als ENV
) om de *env(3) C functies familie te gebruiken. Dus het ENV
object is slechts een Ruby wrapper op C functies die belast zijn met het beheer van de omgevingsvariabelen
Daarnaast breidt het ENV
object de Enumerable
module uit, maar overschrijft een stel methoden van deze module zoals each
en each_pair
bijvoorbeeld
irb> ENV.singleton_class.included_modules
=>
Om samen te vatten, ENV
is een “enumerable” instantie van Object
opgeslagen in een globale constante.
Voel je vrij om het hash.c bestand door te bladeren voor meer informatie.
Voilà !