Lua中rawset和rawget的作用浅析
rawget是为了绕过__index而出现的,直接点,就是让__index方法的重写无效。(我这里用到"重写"二字,可能不太对,希望能得到纠正)
Window={}
Window.prototype={x=0,y=0,width=100,height=100,}
Window.mt={}
functionWindow.new(o)
setmetatable(o,Window.mt)
returno
end
Window.mt.__index=function(t,key)
return1000
end
Window.mt.__newindex=function(table,key,value)
ifkey=="wangbin"then
rawset(table,"wangbin","yes,iam")
end
end
w=Window.new{x=10,y=20}
print(rawget(w,w.wangbin))
打印结果是:nil。这里的元表中__index函数就不再起作用了。
但是rawset呢,起什么作用呢?我们再来运行一段代码。
Window={}
Window.prototype={x=0,y=0,width=100,height=100,}
Window.mt={}
functionWindow.new(o)
setmetatable(o,Window.mt)
returno
end
Window.mt.__index=function(t,key)
return1000
end
Window.mt.__newindex=function(table,key,value)
table.key="yes,iam"
end
w=Window.new{x=10,y=20}
w.wangbin="55"
然后我们的程序就stackoverflow了。可见,程序陷入了死循环。因为w.wangbin这个元素本来就不存在表中,然后这里不断执行进入__newindex,陷入了死循环。
热门推荐
10 儿子立冬祝福语简短独特
11 对当兵的祝福语简短
12 侄儿高考试祝福语简短
13 伴郎红包祝福语朋友简短
14 媳妇生日简短祝福语朋友
15 公司年会祝福语简短最好
16 元旦感恩祝福语简短大全
17 红包祝福语简短10字
18 周六早晨祝福语简短