lua中rawset/rawget
发布时间:2020-12-14 22:06:36 所属栏目:大数据 来源:网络整理
导读:rawget 是为了绕过__index而出现的,直接点,就是让__index方法的重写无效。(我这里用到"重写"二字,可能不太对,希望能得到纠正) Window = {}Window.prototype = {x = 0,y = 0,width = 100,height = 100,}Window.mt = {}function Window.new(o)setmetatable
rawget是为了绕过__index而出现的,直接点,就是让__index方法的重写无效。(我这里用到"重写"二字,可能不太对,希望能得到纠正)
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 = function (t,key) return 1000 end 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} print(rawget(w,w.wangbin))打印结果是:nil。这里的元表中__index函数就不再起作用了。
但是rawset呢,起什么作用呢?我们再来运行一段代码。
Window = {} Window.prototype = {x = 0,value) table.key = "yes,i am" end w = Window.new{x = 10,y = 20} w.wangbin = "55"然后我们的程序就stack overflow了。可见,程序陷入了死循环。因为w.wangbin这个元素本来就不存在表中,然后这里不断执行进入__newindex,陷入了死循环。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |