码迷,mamicode.com
首页 > Windows程序 > 详细

__newindex

时间:2015-09-20 16:10:11      阅读:180      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!