目录
前言:
在C++等其他语言中,我们可以通过限定符const设置常量和常量对象,以防止该变量和对象被修改,提高数据的安全线。但是对于lua来说,是没有const限定符的,所以需要通过取巧的方式来限定。
如何设置只读table
那么对于lua如何做到这点?
lua 里有一个__index meta方法,当我们访问一个表不存在的域时,会触发lua解释器去查找__index meta方法 如果不存在,返回结果nil,如果存在,则由__index meta方法 返回结果。
__newindex meta方法 是用来对表进行更新,当你给一个表缺少的域赋值,解释器就会查找__newindex meta方法 ,如果存在则调用这个函数,而不进行赋值操作。另外有一个 raw meta方法 可经绕过__newindex meta方法 。
我们可以重写:__index meta方法 和__newindex meta方法便可达到让表只读的目的。
lua代码如下:
function only_read_table(t)
local temp= t or {}
local mt = {
__index = function(t,k) return temp[k] end ;
__newindex = function(t, k, v)
error("尝试更新table数据")
end
}
setmetatable(temp, mt)
return temp
end
用法实例:
local configTable = {1,2,3}
local configTable_new = only_read_table( configTable ) --configTable 为只读
configTable_new [5] = 1 --对表进行更新,会报错:尝试更新table数据