В чем большая проблема с переключением 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 можно получить доступ к upvalues напрямую.) Из того, что я написал, подход 5.2 выглядит гораздо менее гибким.
В своем Новинках Lua 5.2 Роберто пишет:
"Будучи синтаксическим сахаром, он намного проще, чем старые среды"
Где простота? Что я пропустил?
Я считаю, что эта тема заслуживает лучшего лечения, которое дано в Руководстве пользователя 5.2.