Lua :setfenv ()против _ENV

В чем проблема переключения 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.

12
задан Nicol Bolas 19 August 2012 в 02:23
поделиться