频道栏目
IT货架 > > 正文
lua基础篇(二)
网友分享于:Jun 12, 2018 11:39:28 PM    来源: IT货架   

元表

metatable:(元表)一组元操作(元方法)的集合;

__index:元方法之一,作用:定义了新的索引操作;

    若索引表中没有的key,会去查找表的元方法,即metatable中的__index方法(也可以是另一个表)

    原型:__index = fuunction(table,key)                 --此处的table为调用该元方法的

            if type(key) == "number" then

                print("the key's value is nil!");

            end

        end

__newindex:元方法之一,作用:定义新的赋值操作;

    若对表中不存在的key进行复制操作,执行该元方法(也可以是一个表);

    原型:__newindex = function(table,key,value)

            if key == "bucunzide" then

                rawset(table,"bucunzide","geiyige");

            end

        end

__add:元方法之一 ,作用类似于运算符重载,用于表之间的运算;

    __index、 __newindex 不同,操作符索引只能是函数。 它们接受的第一个参数总是目标表, 接着

    是右值 (除了一元操作符"-",即索引__unm)。下面是操作符列表:

__mode:元方法之一,用于指定表的弱引用特性;

    1key值弱引用,只要其他地方没有对key值引用,那么,table自身的这个字段也会被删除。设置方法:setmetatable(t, {__mode = "k"});

    2value值弱引用,只要其他地方没有对value值引用,那么,table的这个value所在的字段也会被删除。设置方法:setmetatable(t, {__mode = "v"});

    3keyvalue弱引用,规则一样,但是keyvalue都同时生效,任意一个起作用时都会导致table的字段被删除。设置方法:setmetatable(t, {__mode = "kv"});

------------------------------------------------------------------------

    rawset(table,key,value) :设置表的索引

    rawget(table,key):获取表的索引

    __index = fuunction(table,key)

        if type(key) == "number" then

            --table[key] = 1000;            若此处直接使用key索引会再次调用__index方法,进入死循环;

            rawset(table,key,1000);        使用rawset()方法可以直接设置新的键值对,从而避免调用__index和__newindex方法;

        end

    end

    


广告服务联系QQ:1134687142 | 网站地图

版权所有: IT货架- 内容来自互联网,仅供用于技术学习,请遵循相关法律法规. 京ICP备11030978号-1