Книга: Программирование на языке Ruby

14.4.2. Хранение переменных окружения в виде массива или хэша

14.4.2. Хранение переменных окружения в виде массива или хэша

Важно понимать, что объект ENV — не настоящий хэш, а лишь выглядит как таковой. Например, мы не можем вызвать для него метод invert; будет возбуждено исключение NameError, поскольку такого метода не существует. Причина такой реализации в том, что существует тесная связь между объектом ENV и операционной системой; любое изменение хранящихся в нем значений отражается на состоянии ОС, а такое поведение с помощью простого хэша не смоделируешь.

Однако имеется метод to_hash, который вернет настоящий хэш, отражающим текущее состояние:

envhash = ENV.to_hash
val2var = envhash.invert

Получив такой хэш, мы можем преобразовать его к любому другому виду (например, в массив):

envarr = ENV.to_hash.to_a

Обратное присваивание объекту ENV недопустимо, но при необходимости можно пойти обходным путем:

envhash = env.to_hash
# Выполняем произвольные операции... и записываем обратно в ENV.
envhash.each {|k,v| ENV[k] = v }

Оглавление книги


Генерация: 3.454. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз