Objekt ENV v jazyce Ruby
V tomto článku se budeme zabývat následujícími tématy:
- objekt
ENV
-
ENV
a funkce standardní knihovny -
ENV
za scénou
Před začátkem
S radostí se s vámi podělím o náš nejnovější projekt: Zábavná fakta o Ruby – 1. díl
Prosím, neváhejte a sdílejte tento příspěvek! 🙏
Děkuji vám za váš čas!
ENV
poskytuje rozhraní API pro manipulaci s proměnnými prostředí.
Působí jako Hash
, poskytuje sadu metod pro přidávání, změnu, mazání a přístup k proměnným prostředí, které jsou rozhodně přívětivé pro Ruby
Ve výše uvedeném příkladu můžeme vidět stručné použití API:
- 001- nastavíme hodnotu
'cool!'
proměnné prostředíAN_ENV_VARIABLE
pomocí metodyENV.=
- 002- poté přistoupíme k hodnotě
AN_ENV_VARIABLE
pomocí metodyENV.
- 003- změníme hodnotu
AN_ENV_VARIABLE
na'great!'
pomocí metodyENV.=
- 004- odstraníme proměnnou prostředí
AN_ENV_VARIABLE
pomocí metodyENV.delete
- 005- pokusíme se získat přístup k proměnné
AN_ENV_VARIABLE
a poskytneme výchozí hodnotu, pokud neexistuje, pomocí metodyENV.fetch
To je super ! Ale kde jsou systémové proměnné prostředí?“
ENV a funkce standardní knihovny
Objekt ENV
se při správě proměnných prostředí spoléhá na funkce standardní knihovny jazyka C. V případě, že se jedná o systémové proměnné prostředí, je třeba je spravovat.
Příklad když zavoláte metodu ENV.
, pak Ruby zavolá příslušnou funkci standardní knihovny C v závislosti na vašem operačním systému – například getenv(3)
pro unix-like OS – aby načetl příslušnou proměnnou prostředí.
Tento systém je efektivní a spoléhá na silnou standardní knihovnu.
Dále se přistupuje pouze k manipulovaným proměnným prostředí za běhu. Při spuštění programu Ruby se do paměti předem nenahrávají žádné proměnné prostředí.
Nyní se tedy podíváme na to, jak je ENV
implementován za scénou.
ENV za scénou
ENV
je objekt podobný hash. To znamená, že je to instance Object
a že má spoustu metod podobných instanci Hash
.
irb> ENV.class
=> Object
Za scénou objekt ENV
překóduje metody podobné hash (jako ENV
), aby mohl používat rodinu funkcí C *env(3). Objekt ENV
je tedy jen obal jazyka Ruby na funkce jazyka C, které mají na starosti správu proměnných prostředí
Objekt ENV
navíc rozšiřuje modul Enumerable
, ale přepisuje spoustu metod tohoto modulu, například jako each
a each_pair
irb> ENV.singleton_class.included_modules
=>
Pro shrnutí: ENV
je „vyjmenovatelná“ instance Object
uložená v globální konstantě.
Pro další informace si klidně projděte soubor hash.c.
Voilà !
.