Az ENV objektum Ruby-ban
Ebben a cikkben a következő témákat fogjuk megvizsgálni:
- a
ENV
objektum -
ENV
és a szabványos könyvtári függvények -
ENV
a színfalak mögött
Előtte, hogy elkezdjük
Nagy örömmel osztom meg veletek legújabb projektünket: Fun Facts about Ruby – Volume 1
Kérem, bátran terjessze és ossza meg ezt a bejegyzést! 🙏
Köszönöm, hogy időt szakítottál rám!
ENV
API-t biztosít a környezeti változók manipulálásához.
Azáltal, hogy úgy viselkedik, mint egy Hash
, egy sor metódust biztosít a környezeti változók hozzáadásához, módosításához, törléséhez és eléréséhez, ami határozottan Ruby-barát
A fenti példában láthatjuk az API rövid használatát:
- 001- a
ENV.=
metódus - 002- segítségével beállítjuk a
'cool!'
értékét aAN_ENV_VARIABLE
környezeti változónak - 002- majd a
ENV.
metódus - 003- a
AN_ENV_VARIABLE
értékét'great!'
-re módosítjuk aENV.=
metódus - 004- segítségével. töröljük a
AN_ENV_VARIABLE
környezeti változót aENV.delete
módszerrel - 005- megpróbáljuk elérni a
AN_ENV_VARIABLE
értékét, és ha nem létezik, akkor megadunk egy alapértelmezett értéket aENV.fetch
módszerrel
Ez király ! De hol vannak a rendszerkörnyezeti változók?
ENV és a szabványos könyvtári függvények
A ENV
objektum a C szabványos könyvtári függvényekre támaszkodik a környezeti változók kezelésében.
Az ENV.
metódus meghívásakor például a Ruby az operációs rendszertől függően meghívja a megfelelő C szabványos könyvtári függvényt – getenv(3)
például unix-szerű OS esetén -, hogy lekérje a megfelelő környezeti változót.
Ez a rendszer hatékony és erős szabványos könyvtárra támaszkodik.
Ezeken kívül csak a futásidőben manipulált környezeti változókhoz férünk hozzá. A Ruby program indításakor nincs a memóriába előretöltött környezeti változó.
Most nézzük meg, hogyan valósul meg a ENV
a színfalak mögött.
ENV a színfalak mögött
ENV
egy hash-szerű objektum. Ez azt jelenti, hogy a Object
egy példánya, és egy csomó olyan metódussal rendelkezik, amelyek hasonlóak a Hash
egy példányához.
irb> ENV.class
=> Object
A színfalak mögött a ENV
objektum átkódolja a hash-szerű metódusokat (mint ENV
), hogy a *env(3) C függvénycsaládot használja. Tehát a ENV
objektum csak egy Ruby wrapper a C függvényekre, amelyek a környezeti változók kezeléséért felelősek
Mégis a ENV
objektum kiterjeszti a Enumerable
modult, de felülírja ennek egy csomó metódusát, mint például each
és each_pair
irb> ENV.singleton_class.included_modules
=>
Mégis a ENV
egy globális konstansban tárolt Object
“felsorolható” példánya.
Böngésszen nyugodtan a hash.c fájlban további információkért.
Voilà !