--file1.lua
x = funciton()
print("this is x")
end
-------------
--file2.lua
local t = {}
local _G = _G
setfenv(1,t) --设置了这个之后,只要是在本文件中对未声明变量的访问,全部会导致递归。
_G.setmetatable(t, {
__index = function(t, i)
if i != "x" then return end
dofile("file1.lua") --我以为这样就会把x声明为t中的一个全局变量。但是我错了。file1.lua内容加载后,是在块内出现的。都是局部变量
return t[i]
end
})
return t
-----------------
--file3.lua
require("file2")
Main_t.x()
-----------------
运行:lua file3.lua
结果自然是无限循环