• Lua中强大的元方法__index详解


    今天要来介绍比较好玩的内容:__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元方法。

  • 相关阅读:
    Linux防火墙:iptables禁IP与解封IP常用命令
    php7安装 event扩展
    laravel5.5 调用系统自带登陆认证auth
    linux 搭建rap记录
    微信小程序silk格式转码成mp3格式
    抓包软件
    laravel 微信小程序登录 加密解密扩展包
    mysql索引
    sphinx-for-chinese在windows下安装与使用方法
    sphinx增量索引和主索引来实现索引的实时更新
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5606086.html
Copyright © 2020-2023  润新知