Предположим, у меня есть имя файла «test.lua», содержащие строки ниже:Как получить закрытие в lua?
--[[ test.lua --]]
local f = function()
print"local function f in test.lua"
end
f_generate = function()
local fun = loadstring(" f()")
-- local env = getfenv(1)
-- set(fun,env)
return fun
end
f_generate()()
--[[ end of test.lua--]]
потому LoadString делать свои вещи в рамках глобальной окружающей среды, поэтому, когда я называю f_generate()() я получите ошибку msgstr "попытка вызвать глобальный 'f' (значение nil)"
Прокомментированный код показывает, что функциональная среда не может справиться с этой проблемой.
Причина table - единственная структура данных в lua, (и функциональная среда и другие объекты реализуются таблицей), я думаю, разумно предположить, что закрытие также реализуется таблицей, но как я могу ее получить ?
локальная __cmp__table = { [ ">"] = функция (а, б) возвращают> конец B, [ "> ="] = функция (а, б) возвращают конец а> = B, [ "<"] = функция (a, b) возвращает a gray
Это настоящий код, кажется, что мне действительно нужна loadstring, любое предложение? и отбросить все практические нужды и обходные пути, мы все же можем говорить о возможности получить закрытие, ведь закрытие является активной цепочкой записей функции (исправьте меня, если ...), и я думаю, что lua реализует ее как table (потому что вся вещь может быть реализована как таблица ...; опять же, исправьте меня, если ...) спасибо большое, это действительно помогает. – gray
@gray: нет, замыкания и локальные переменные кадры не являются таблицами. – Javier