Lua 元表

作用

子表执行特定操作 会执行元表中的方法
元表类似子表的父亲
元表是表

元表设置和获取

meta={}
myTable={}
参数1子表 参数 2 元表
setmetatable(myTable,meta)
参数 子表
getmetatable(myTable)

元表特定操作

  1. __tostring 注意:前面两个下划线
    meta2={
    当子表作为字符串使用时候 会调用该方法
    __tostring=function()
    return “tostring”
    end
    }
    myTable2={}
    setmetatable(myTable2,meta2)
    print(myTable2)–调用__tostring
  2. __call
    meta3={
    当子表作为函数使用时候 会调用该方法
    __call=function (t,a)
    print(t)
    print(a)
    end
    }
    myTable3={}
    setmetatable(myTable3,meta3)
    myTable3(2)–当作函数使用时候 第一个参数默认是表本身 参数二 传入的参数
  3. 运算符重载
    meta4={
    子表使用+运算符 调用该方法
    __add =function(t1,t2)–加法
    return t1.age+t2.age
    end,
    子表使用==运算符 调用该方法
    __eq=function(t1,t2)-- == 是否相等
    return true
    }
    myTable4={age=1}
    myTable5={age=5}
    setmetatable(myTable4,meta4)
    setmetatable(myTable5,meta4)
    print(myTable4+myTable5)
    注意:用条件运算符比较对象 两个表的元表一样
    print(myTable4==myTable5)
    其他关键字:__sub减、__mul乘、__div除、__mod取余、__pow幂运算、__lt小于、__le小于等于、__concat拼接
    4.__idnex
    在子表中找不到指定属性 会到元表中__index指定的表中查找属性 没有返回nil
    meta6={age=1}
    myTable6={}
    meta6.__index=meta6 注意:__index写在表外初始化
    setmetatable(myTable6,meta6)
    print(myTable6.age)
    rawget不查找元表 在自己的表中查找该属性 不受__index影响
    print(rawget(myTable4,“age”))
  4. __newIndex
    被赋值时 如果赋值给一个不存在的索引 会把值赋值到newindex指向的表中 不会改变自己
    meta7={}
    meta7.__newindex={}
    myTable7={}
    setmetatable(myTable7,meta7)
    myTable7.age=5 age属性未添加入表中
    print(myTable7.age) nil
    rawset 赋值给子表 不受到__newindex的影响
    rawset(myTable7,“age”,2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值