Lua查找表元素过程(元表、__index方法是如何工作的)
本文转载自http://blog.csdn.net/xocoder/article/details/9028347 近日开始频繁使用Lua,于是把这块东西理了一下,特此记录。 [plain]?view plaincopyprint?
执行结果:nil [plain]? father?=?{?? ????house=1?? }?? son?=?{?? ????car=1?? }?? setmetatable(son,?father)?--把son的metatable设置为father?? print(son.house)?? 输出的结果是nil,但如果把代码改为 father?=?{?? ????house=1?? }?? father.__index?=?father?--?把father的__index方法指向自己?? son?=?{?? ????car=1?? }?? setmetatable(son,?father)?? print(son.house)?? 输出的结果为1,符合预期
在上述例子中,访问son.house时,son中没有house这个成员,但Lua接着发现son有元表father,于是此时father被当做元表来查找,此时,Lua并不是直接在father中找名为house的成员,而是调用father的__index方法,如果__index方法为nil,则返回nil,如果是一个表(上例中father的__index方法等于自己,就是这种情况),那么就到__index方法所指的这个表中查找名为house的成员,于是,最终找到了house成员。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |