lua元表中提供的元方法中有两个比较特殊的元方法:
__index:提供table查找键值
__newindex:提供table新增键值
那么要实现一个只读类只要把只读的内容放入到__index中,再不允许进行__newindex进行新增键值即可。
那么代码如下:
function onlyReadTable(tab)
local mt={
__index=tab,--将传入的tab设置为__index查找
__newindex=function()
print("it is an only ready table")
end--__newindex新增键值设置为空函数,也就不进行任何操作
}
return setmetatable({},mt)--返回一个有mt为元表的一个空表
end
--使用
local testTable=onlyReadTable( {1,2,3,4,5})
print(testTable[1]) --输出1
print(testTable[6]) --输出nil
testTable[6]=6--尝试新增键值 输出it is an only ready table
print(testTable[6]) --输出nil