码迷,mamicode.com
首页 > 其他好文 > 详细

__index元方法

时间:2015-09-20 14:26:40      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

      我们知道当访问table里一个不存在的字段时会返回nil,这不完全正确。实际上,当我们访问一个不存在的字段时,会去查找一个__index的元方法。如果没有这个元方法,那么返回nil,如果有,那么就由这个元方法提供最后的结果。

      举个栗子:

       

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 = function(table,key)
   return window.prototype[key]
end

w = window.new{x= 50, y = 60}
print(w.width)   -->100

 

我们定义一个表w,表里只有x,y2个字段。此时我们去查找w.width是查找不到的,于是去查找它的元方法,即__index.它返回了prototype[width],于是返回了100.

__index也可以是个table,可以改写成以下:

window.mt.__index = window.prototype

补充一点,如果想要“绕过”这个__index,可以用rawget方法

print(rawget(w,w.width))   -->nil

 

__index元方法

标签:

原文地址:http://www.cnblogs.com/OrangeLife/p/4823321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!