lua的table+setfenv+setmetatable陷阱

1 篇文章 0 订阅

--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

结果自然是无限循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值