在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天要来介绍比较好玩的内容:__index元方法 我是备胎,记得回头看看 咳咳,相信每一位女生都拥有或者不知不觉中拥有了一些备胎,啊!当然,又或许是成为过别人的备胎。 没有备胎的人,就不是完整的人生。(扯远了。。。) 我们来想象一下,如果对一个table进行取值操作,但是table根本就没有这个值呢? 比如: local t = { name = "hehe", } local mt = { __index = function(table, key) print("虽然你调用了我不存在的字段,不过没关系,我能探测出来:" .. key); end } setmetatable(t,mt); --或者这样写t = setmetatable({name = "hehe"}, mt) print(t.money); 如果这里的t没有元表,那么这里打印的结果就是:nil,因为t里面确实没有“money”这个key,自然也就没有对应的值。 但是如果给t设置了元表,那么情况就变了。 Lua查找一个表的元素时的规则如下: 1、在表中查找,如果找到,返回该元素,找不到,转到步骤2 2、判断该表是否有元表,如果没有,返回nil,如果有,转到3 3、判断元表有没有__index元方法,如果__index元方法为nil,则返回nul;如果__index方法是一个表,则重复1,2,3;如果__index方法是一个函数,则调用之。 所以说,__index元方法是不是有点备胎的意思呢,只有表里找不到的时候,才会想到元表中的__index元方法。 |
请发表评论