lua中设置只读table
2013-09-02 16:20
405 查看
C++里有const用来定义常量,保护参数或函数意外地修改,提高程序的健壮性。在lua里虽然没有没有类似的关键字,我们可以用表来模拟实现其只读的功能,来保护我们的数据被意义地修改。
lua 里有一个__index metamethod,当我们访问一个表不存在的域时,会触发lua解释器去查找__index metamethod: 如果不存在,返回结果nil,如果存在,则由__index metamethod返回结果。
__newindex metamethod 是用来对表进行更新,当你给一个表缺少的域赋值,解释器就会查找__newindex metamethod,如果存在则调用这个函数,而不进行赋值操作。另外有一个 raw metamethod可经绕过__newindex metamethod。
我只须重写:__index metamethod 和__newindex metamethod 便可达到让表只读的目的。
代码如下:
function table_read_only(t)
local temp= t or {}
local mt = {
__index = function(t,k) return temp[k] end ;
__newindex = function(t, k, v)
error("attempt to update a read-only table!")
end
}
setmetatable(temp, mt)
return temp
end
用法:
local t_a = {1,2,3}
local t_b = table_read_only( t_a) --t_b为只读
t_b[5] = 1 --对表进行更新,会报错:attempt to update a read-only table!
lua 里有一个__index metamethod,当我们访问一个表不存在的域时,会触发lua解释器去查找__index metamethod: 如果不存在,返回结果nil,如果存在,则由__index metamethod返回结果。
__newindex metamethod 是用来对表进行更新,当你给一个表缺少的域赋值,解释器就会查找__newindex metamethod,如果存在则调用这个函数,而不进行赋值操作。另外有一个 raw metamethod可经绕过__newindex metamethod。
我只须重写:__index metamethod 和__newindex metamethod 便可达到让表只读的目的。
代码如下:
function table_read_only(t)
local temp= t or {}
local mt = {
__index = function(t,k) return temp[k] end ;
__newindex = function(t, k, v)
error("attempt to update a read-only table!")
end
}
setmetatable(temp, mt)
return temp
end
用法:
local t_a = {1,2,3}
local t_b = table_read_only( t_a) --t_b为只读
t_b[5] = 1 --对表进行更新,会报错:attempt to update a read-only table!
相关文章推荐
- Lua 设置table为只读属性
- Lua中设置table为只读属性的方法详解
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(8): 生成只读table
- lua-将数据插入table,并设置Key值
- lua设置一个table的某字段为nil后,再访问该字段竟然不是nil??!!
- 为lua table写保护变成只读
- Oracle设置表只读-alter table xxx read only
- Qt - 设置TableWidget只读
- 代理的思想--实现lua中table的跟踪与只读
- 【Lua】将数据插入table,并设置Key值
- lua-将数据插入table,并设置Key值
- lua如何设置只读全局变量——通过元方法与环境
- cocos2d-lua,tableView中设置了按钮的不可吞噬性,但是还是吞噬了,点住按钮不能拖到tableView
- excel中的如何将某一列或几列设置为只读 不能修改和删除
- 用CSS设置Table的细边框的最好用的方法
- tableView的常用设置方法
- Hibernate table schema 的设置与应用
- table中TextBox跨列设置
- Oracle中设置一个表为只读
- lua中的table简单应用