通过lua本身的元表和元方法,加上代理的思想实现。
具体如下
function errorHandle(str)
print("=================LUA ERROR:=================")
if str then
print(str)
print("--------------------------------------------")
end
print(debug.traceback())
print("--------------------------------------------")
end
function readOnly(t)
local proxy = {}
local mt = {
__index = t,
__newindex = function (t, k, v)
errorHandle("attempt to update a read-only table")
end
}
setmetatable(proxy, mt)
return proxy
end
function mainFunc()
local days = readOnly{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
print(days[1])
days[2] = "Noday"
end
xpcall(mainFunc, errorHandle)