Obiekt ENV w Ruby
W tym artykule będziemy badać następujące tematy:
- obiekt
ENV
-
ENV
i funkcje biblioteki standardowej -
ENV
za sceną
Przed rozpoczęciem
Jestem zachwycony, że mogę podzielić się z Wami naszym najnowszym projektem: Fun Facts about Ruby – Volume 1
Please feel free to spread the word and share this post! 🙏
Dziękuję za Twój czas!
ENV
Dostarcza API do manipulowania zmiennymi środowiskowymi.
Działając jak Hash
, dostarcza zestaw metod do dodawania, zmiany, usuwania i dostępu do zmiennych środowiskowych, który jest zdecydowanie przyjazny Ruby
W powyższym przykładzie możemy zobaczyć krótkie użycie API:
- 001- ustawiamy wartość
'cool!'
na zmiennej środowiskowejAN_ENV_VARIABLE
za pomocą metodyENV.=
- 002- następnie uzyskujemy dostęp do wartości
AN_ENV_VARIABLE
za pomocą metodyENV.
- 003- modyfikujemy wartość
AN_ENV_VARIABLE
na'great!'
za pomocą metodyENV.=
- 004-. usuwamy zmienną środowiskową
AN_ENV_VARIABLE
używając metodyENV.delete
- 005- próbujemy uzyskać dostęp do
AN_ENV_VARIABLE
i podajemy wartość domyślną, jeśli nie istnieje używając metodyENV.fetch
To jest fajne ! Ale gdzie są systemowe zmienne środowiskowe?
ENV i funkcje biblioteki standardowej
Obiekt ENV
polega na funkcjach biblioteki standardowej C do zarządzania zmiennymi środowiskowymi.
Na przykład, kiedy wywołujesz metodę ENV.
, Ruby wywołuje odpowiednią funkcję biblioteki standardowej C w zależności od systemu operacyjnego – na przykład getenv(3)
dla unix-like OS – w celu pobrania odpowiedniej zmiennej środowiskowej.
Ten system jest wydajny i opiera się na silnej bibliotece standardowej.
Ponadto, tylko manipulowane zmienne środowiskowe w czasie działania są dostępne. Nie ma zmiennych środowiskowych wstępnie ładowanych do pamięci podczas uruchamiania programu Ruby.
Więc, spójrzmy teraz jak ENV
jest zaimplementowany za sceną.
ENV za sceną
ENV
jest obiektem typu hash. Oznacza to, że jest instancją Object
i że ma kilka metod podobnych do instancji Hash
.
irb> ENV.class
=> Object
Za sceną, obiekt ENV
rekoduje metody hash-like (jako ENV
) w celu użycia rodziny funkcji C *env(3). Tak więc obiekt ENV
jest tylko opakowaniem Ruby na funkcje C, które są odpowiedzialne za zarządzanie zmiennymi środowiskowymi
Ponadto, obiekt ENV
rozszerza moduł Enumerable
, ale nadpisuje kilka metod tego modułu jak each
i each_pair
na przykład
irb> ENV.singleton_class.included_modules
=>
Podsumowując, ENV
jest „wyliczalną” instancją Object
przechowywaną w stałej globalnej.
Nie krępuj się przeglądać pliku hash.c, aby uzyskać więcej informacji.
Voilà !