lua 只读表
2017-08-31 18:19
387 查看
–对于制度表中的proxy理解不透彻,做了一下实验
--只读表 1st. --[[ --只读表的错误用法实验 local function readOnly(t) local proxy = {} local mt = { __index = proxy, __newindex = function(t,k,v) error("attempt to update a read-only table", 2) end } setmetatable(t, mt) return t end local words = {'a','b','c'} local readOnlyWords = readOnly(words) print(readOnlyWords[1]) readOnlyWords[1] = 'd' print(readOnlyWords[1]) ]]
--[[ --只读表 2nd. --解释,根据示例2 local function readOnly(t) local proxy = {} local mt = { __index = t, __newindex = function(t,k,v) error("attempt to update a read-only table", 2) end } setmetatable(proxy, mt) return proxy end local sevenDay = {"Monday", "TuesDay", "WednessDay", "ThursDay", "Friday", "Saturday", "Sunday"} local t = readOnly(seavenDay) print(t[1]) t[2] = "SunDay" ]]
实验一 和 实验二 分别是使用proxy和不使用proxy的情况,
实验一中如果不使用proxy,那么t的元表就是mt,
当传入的t中已经附着了对应的属性时,读取无法触发__index,如果修改这个对应的属性值,也无法触发__newindex
结果就是无法实现只读的效果
实验二中使用了proxy, 当读取时,proxy肯定会触发__index,回去读取t的值,更新时也一定会触发__newindex,此时阻止更新值就OK了
结论: proxy = {} 保证了 __index, __newindex的必定执行,从而达到控制是否只读的效果
相关文章推荐
- lua中设置只读table
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(8): 生成只读table
- lua如何设置只读全局变量——通过元方法与环境
- Lua只读表
- Lua中只读表和只允许修改表
- Lua 设置table为只读属性
- 为lua table写保护变成只读
- Lua中设置table为只读属性的方法详解
- 代理的思想--实现lua中table的跟踪与只读
- ubuntu15.04编译lua源码
- LUA相关工具资源
- 无法执行添加/移除操作,因为代码元素**是只读的
- [置顶] 带赖子的胡牌算法lua版本
- Lua学习之Mac下封装C模块
- 巧用泛型和Lambda解决只读对象的缓存技巧
- cocos2d-x TestLua 之 CCMenuItemToggle菜单类
- Lua协程例子
- cocos-quick-lua 学习笔记--定时器:scheduler
- 设定checkbox为只读的方法
- java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错