Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Использование _G и _ENV

Я знаю: _G - окружение единое для всех модулей, файлов, блоков кода и т.д., _ENV - частное для каждого.
Увы, нюансы их использования я не совсем понял. (То ли я дурак, то ли книга не очень)
_ENV уникально только для каждого модуля\файла или для каждого блока, будь то функция, цикл, do/end и т.д. ? По умолчанию _ENV присваивается _G? Доступны ли переменные local в _ENV?


Ответ

1 и 2: судя по luac -l -l, _ENV есть upvalue (т.е. забита для каждой функции, менять никто не запрещает), и да, по умолчанию она равна _G. По факту, как ясно из того же luac -l -l, весь доступ к "глобальным переменным" (точнее, свободным именам), идёт через _ENV 3. Нет, не доступны. Вы же их не видете в _G, они на то и локальные. UPD: что важно, это всё начинается в lua 5.2, в 5.1 такого нет.
P.S.: как раз моё по теме: http://goo.gl/E3d5Zb

Комментариев нет:

Отправить комментарий