美文网首页
Lua元表补充

Lua元表补充

作者: Mad_Elliot | 来源:发表于2018-12-26 14:04 被阅读0次

    元表就是一个表
    __newindex:给原来表中不存在的key赋值时会转到__newindex。

    为一个方法时执行这个方法:

    t = {} --元表
    t1 = {age = 18}
    t.__newindex = function(tab, key)
        print("原来的表中没有key:" .. key)
    end
    setmetatable(t1, t)
    t1.name = "小明" --执行方法,不执行赋值操作
    print(t1.name)
    
    >原来的表中没有key:name
    >nil
    

    为一个表时,会修改或添加__newindex表中key对应的元素

    tt = {} --元表
    t2 = {}
    t3 = {name = "小明"}
    tt.__newindex = t3
    setmetatable(t2, tt)
    t2.name = "XXX" --修改或添加__newindex里对应key元素
    print(t2.name)
    print(t3.name)
    
    >nil
    >XXX
    

    忽略元表rawget和rawset

    t = {
        __index = function( ... )
            print("__index")
        end,
        __newindex = function()
            print("__newindex")
        end
    }   --元表
    t1 = {}
    setmetatable(t1, t)
    i = t1.name --打印 __index
    t1.name = "小明"  --打印 __newindex,赋值不执行
    
    i = rawget(t1, "name")
    print(i)    --返回 nil
    rawset(t1, "name", "哇哈哈")
    i = t1.name
    print(i)    --打印 哇哈哈
    

    相关文章

      网友评论

          本文标题:Lua元表补充

          本文链接:https://www.haomeiwen.com/subject/rhjhlqtx.html