L’objet ENV en Ruby
Dans cet article, nous allons explorer les sujets suivants :
- l’objet
ENV
-
ENV
et les fonctions de la bibliothèque standard -
ENV
derrière la scène
Avant de commencer
Je suis ravi de partager avec vous notre dernier projet : Fun Facts about Ruby – Volume 1
N’hésitez pas à faire passer le mot et à partager ce post ! 🙏
Merci pour votre temps!
ENV
fournit une API pour manipuler les variables d’environnement.
En agissant comme un Hash
, il fournit un ensemble de méthodes pour ajouter, modifier, supprimer et accéder aux variables d’environnement qui est définitivement Ruby-friendly
Dans l’exemple ci-dessus, nous pouvons voir une brève utilisation de l’API :
- 001- nous définissons la valeur
'cool!'
à la variable d’environnementAN_ENV_VARIABLE
en utilisant la méthodeENV.=
- 002- puis nous accédons à la valeur de
AN_ENV_VARIABLE
en utilisant la méthodeENV.
- 003- nous modifions la valeur de
AN_ENV_VARIABLE
en'great!'
en utilisant la méthodeENV.=
- 004- on supprime la variable d’environnement
AN_ENV_VARIABLE
en utilisant la méthodeENV.delete
- 005- on essaie d’accéder à la
AN_ENV_VARIABLE
et on fournit une valeur par défaut si elle n’existe pas en utilisant la méthodeENV.fetch
C’est cool ! Mais où sont les variables d’environnement du système ?
ENV et les fonctions de la bibliothèque standard
L’objet ENV
s’appuie sur les fonctions de la bibliothèque standard C pour gérer les variables d’environnement.
Par exemple, lorsque vous appelez la méthode ENV.
alors Ruby appelle la fonction appropriée de la bibliothèque standard C en fonction de votre OS – getenv(3)
pour les OS de type unix par exemple – pour récupérer la variable d’environnement appropriée.
Ce système est efficace et s’appuie sur une bibliothèque standard forte.
De plus, seules les variables d’environnement manipulées à l’exécution sont accessibles. Il n’y a pas de variables d’environnement préchargées en mémoire au démarrage du programme Ruby.
Alors, maintenant, regardons comment ENV
est implémenté derrière la scène.
ENV derrière la scène
ENV
est un objet de type hash. Cela signifie que c’est une instance de Object
et qu’il a un tas de méthodes similaires à une instance de Hash
.
irb> ENV.class
=> Object
Dans la scène, l’objet ENV
recode les méthodes de type hash (comme ENV
) afin d’utiliser la famille de fonctions C *env(3). Ainsi, l’objet ENV
n’est qu’un wrapper Ruby sur les fonctions C qui sont chargées de gérer les variables d’environnement
De plus, l’objet ENV
étend le module Enumerable
mais surcharge un tas de méthodes de ce module comme each
et each_pair
par exemple
irb> ENV.singleton_class.included_modules
=>
Pour récapituler, ENV
est une instance « énumérable » de Object
stockée dans une constante globale.
N’hésitez pas à parcourir le fichier hash.c pour plus d’informations.
Voilà !