理解Lua语言中的__index,__newindex,rawget和rawset
在谈及Lua中的__index,__newindex,rawget和rawset前,需要理解Lua中的元表这个概念。
零、元表的概念对Lua中元表的解释: 元表可以改变表的行为模式。
这里举个例子:
Window = {}Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,}Window.mt = {}function Window.new(o)setmetatable(o ,Window.mt)return oendWindow.mt.__index = function (t ,key)return 1000endWindow.mt.__newindex = function (table ,key ,value)table.key = "yes,i am"endw = Window.new{x = 10 ,y = 20}w.wangbin = "55"然后我们的程序就stack overflow了。可见,程序陷入了死循环。因为w.wangbin这个元素本来就不存在表中,然后这里不断执行进入__newindex,陷入了死循环。