Lua学习

2018-06-08  本文已影响0人  指间罅隙

Lua 学习

元表

__index 元方法 :访问值

Lua查找一个表元素时的规则,其实就是如下3个步骤:

__newindex 元方法:赋予值

__call 元方法:调用一个值时调用 xx()

   local a = { qqq = '嗯哼' }
    local mt = {}
    mt.__add = function(a, b)
        return a .. b
    end
    --t.key不存在的时候 调用
    mt.__index = function(t, key)
        if key == 'sss' then
            return "哈哈哈"
        else
            return "啪啪啪"
        end
    end
    --t.key = v 时调用
    mt.__newindex = function(t, key, v)
        --赋值方法 rawset
        rawset(t, key, v)
    end
    mt.__call = function(t,v)   
        return t.qqq .. "字符串拼接"..v
    end
    local c = setmetatable(a, mt)
    cclog("-----------a--" .. a.sss) --输出: -----------a--哈哈哈
    cclog("-----------a--" .. a.www) --输出: -----------a--啪啪啪
    cclog("-----------a--" .. a.qqq) --输出: -----------a--嗯哼
    a.sss = "我我我"
    a.www = "你你你"
    cclog("-----------c--" .. c.sss) --输出: -----------c--我我我
    cclog("-----------c--" .. c.www) --输出: -----------c--你你你
    cclog("-----------c--" ..c("星期天"))--输出: -----------c--嗯哼字符串拼接星期天

其他元函数

__add 对应的运算符 '+'.
__sub 对应的运算符 '-'.
__mul 对应的运算符 '*'.
__div 对应的运算符 '/'.
__mod 对应的运算符 '%'.
__unm 对应的运算符 '-'.
__concat 对应的运算符 '..'.
__eq 对应的运算符 '=='.
__lt 对应的运算符 '<'.
__le 对应的运算符 '<='.

上一篇 下一篇

猜你喜欢

热点阅读