总的来说就是利用LUA的元表的两个方法:
__index:当读不存在的键值时调用的,即当真实的键没有时,则会尝试在 index 中进行查找,如果能找到则由 index 进行返回,所以 index 相当于一个默认初始值
**newindex**:当写不存在的键值使用的,当写的键没有时,则用这个方法进行返回
-- 实现一个定义只读表的函数function readonly_table(t)local ret = {}local mt = {__index = t,__newindex = function(_,k,v)print("readonly table!")end}setmetatable(ret,mt)return retendlocal test_readonly=readonly_table{a = "1", b = "2", c = "3"}-- 请注意,这里不能使用迭代器来迭代 test_readonly,因为是没有真实的键,除非重写__pairs,让__pairs去迭代__index,所以这里是没有输出的for k,v in pairs(test_readonly) do print(k,"==>",v) end-- 进行读,表明可读print(test_readonly['a'])-- 进行写,提示不可写test_readonly['d']="4";
