В чем проблема переключения Lua с setfenv()
на _ENV
?
В различных источниках «Что нового» этот шаг упоминается как одно из самых важных изменений между версиями Lua 5.1 и 5.2.
Однако примеры, приведенные в PIL и других источниках, можно сократить до следующего:
-- Lua 5.1 -- Lua 5.2
function myfunc() function myfunc()
setfenv(1, {}) _ENV = {}
end end
Пока что мы получили здесь то, что мы сохранили пять нажатий клавиш. (Я полагаю, что ситуация не сильно отличается от ситуации на стороне C. )Кроме того, если я правильно понял, setfenv()
можно использовать как снаружи, так и изнутри функции, тогда как _ENV
можно получить только изнутри функции. (Конечно, при использовании C API можно получить прямой доступ к повышающим значениям. )Судя по тому, что я написал, подход 5.2 кажется гораздо менее гибким.
В своей книге The Novelties of Lua 5.2 Роберто пишет:
«Будучи синтаксическим сахаром, он намного проще, чем старые среды»
Где простота? Что я упустил из виду?
Я считаю, что эта тема заслуживает лучшего рассмотрения, чем это дано в Руководстве пользователя 5.2.