当访问lua中不存在的全局变量时并不会报错,而是返回nil值。在我们开发的时候稍微不注意写错了变量名,程序并不会报错,类似于下面这种情况。
test = 1
print(tets)
为了防止这种情况,我们可以通过设置全局表_G的元方法__index和__newindex来解决。
全局表_G,所有的全局变量和全局函数都放在这里面,比如上面的test=1,其实是_G.test = 1。
在这之前,我们先理解lua中的__index,__newindex,rawget,rawset方法。
网上很多讲解这几个方法的,我是从这里直接拷贝过来的。
链接:http://www.myexception.cn/mobile/1439151.html
元表的概念
对Lua中元表的解释: 元表可以改变表的行为模式。
这里举个例子:
Window = {}
Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,}
Window.mt = {}
function Window.new(o)
setmetatable(o ,Window.mt)
return o
end
Window.mt.__index = Window.prototype
Window.mt.__newindex = function (table ,key ,value)
if key == "wangbin" then
rawset(table ,"wangbin" ,"yes,i am")
end
end
w = Window.new{x = 10 ,y = 20}
w.wang