lua的table+setfenv+setmetatable陷阱
来源:互联网 发布:hm淘宝上代购是正品吗 编辑:程序博客网 时间:2024/05/01 10:40
--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
结果自然是无限循环
- lua的table+setfenv+setmetatable陷阱
- 神奇的Lua:setfenv,模拟VB的with关键字
- lua中的table使用陷阱
- 【lua】小计setmetatable
- lua setmetatable实现继承
- lua setmetatable __index __newindex
- Lua的类实现继承、多态以及setmetatable方法
- 了解lua setmetatable和__index的小例子
- 了解lua setmetatable和__index的小例子
- Lua的类实现继承、多态以及setmetatable方法
- Lua的类实现继承、多态以及setmetatable方法
- Lua中metatable说明及setmetatable的使用
- Lua的类实现继承、多态以及setmetatable方法
- Lua的类实现继承、多态以及setmetatable方法
- Lua的类实现继承、多态以及setmetatable方法
- 了解lua setmetatable和__index的小例子
- 了解lua setmetatable和__index的小例子
- lua中的setfenv和getfenv
- 《coredump问题原理探究》Linux x86版第二章coredump捕获的环境配置
- loadrunner 性能计数器分析参考值
- 内存数据对齐
- Linux串口编程详解
- LR结果分析——TPS和吞吐率 - Test Life的个人空间
- lua的table+setfenv+setmetatable陷阱
- Linux 下串口编程入门
- JUnit4
- 在测试过程中,可能会出现以下常见的几种测试情况
- 2013年展望
- 以太网帧类型
- 关闭Parallels虚拟机网卡
- c++ fast Delegate 实现代码
- java Io