假设我有一个包含以下行的文件名“test.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()() 时我会得到一个错误“尝试调用全局'f'(一个 nil 值)”
注释掉的代码表明函数环境不能处理这个问题。
因为表是lua中唯一的数据结构,(函数环境和其他很多东西都是通过表实现的),我认为假设闭包也是通过表实现是合理的,但是我怎么能得到它呢?