首页 > Windows开发 > 详细

__newindex

时间:2015-09-20 16:08:01      阅读:246      评论:0      收藏:0      [点我收藏+]

前面说过__index,与__index不同的是,__newindex用于更新,而__index用于查找。当对一个table不存在的字段进行赋值时,就会查找__newindex元方法。如果存在这个元方法,就执行它。如果这个元方法是table,那么久对此table赋值,而不是原table。

window = {}
window.prototype = {x = 20, y = 30, width = 100, height = 200}
window.mt = {}
window.new = function(o)
   setmetatable(o,window.mt)
   return o
end

window.mt.__index = window.prototype
window.mt.__newindex = function(table,key,value)
     print("excu  __newindex....")
end


w = window.new{x= 50, y = 60}
print(rawget(w,w.width))   -->nil
w.xy = 40    -->excu  __newindex....

w中并不存在字段xy,因此执行__newindex方法

 

如果想对xy字段赋值,则修改__newindex方法如下:

mt.__newindex = function(table,key,v)

    rawset(t,key,v)
end

这里需要使用rawset,如果不这样,而进行直接赋值,则会陷入死循环,因为不存在xy字段就会一直查找。

 

__newindex

原文:http://www.cnblogs.com/OrangeLife/p/4823603.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!