zoukankan      html  css  js  c++  java
  • 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元方法。

  • 相关阅读:
    asp.net 2.0 国际化 动态切换语言
    SKU、UPC、EAN和ISBN
    NCalc:处理数学运算的好帮手
    yaf 论坛安装
    Afterlogic xmail 邮局软件不能收email 设置
    要围着中心来做事
    保证Winform程序只有一个实例在运行
    可视热敏读写卡开发
    jQuery CSS 效果
    代碼小片斷
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5606086.html
Copyright © 2011-2022 走看看