Lua元表实现只读类

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

你可能感兴趣的:(Lua)