Obiekt ENV w Ruby

kw. 29, 2021
admin

Obiekt ENV w Ruby
Mehdi Farsi

Follow

Jul 19, 2018 – 3 min read

W tym artykule będziemy badać następujące tematy:

  • obiekt ENV
  • ENVi funkcje biblioteki standardowej
  • ENVza 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!

ENVDostarcza 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 środowiskowej AN_ENV_VARIABLE za pomocą metody ENV.=
  • 002- następnie uzyskujemy dostęp do wartości AN_ENV_VARIABLE za pomocą metody ENV.
  • 003- modyfikujemy wartość AN_ENV_VARIABLE na 'great!' za pomocą metody ENV.=
  • 004-. usuwamy zmienną środowiskową AN_ENV_VARIABLE używając metody ENV.delete
  • 005- próbujemy uzyskać dostęp do AN_ENV_VARIABLE i podajemy wartość domyślną, jeśli nie istnieje używając metody ENV.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à !

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.