zoukankan      html  css  js  c++  java
  • luaMetatable(元表)

    元表的定义

    元表--通俗理解:对普通表做一些行为上的拓展

    setmetatable(table,metatable): 对指定 table 设置元表(metatable)

    getmetatable(table): 返回对象的元表(metatable)

    mytable = {'python','lua','ue4'}
    mymetatable = {}
    setmetatable(mytable,mymetatable) --加后者设置为前者的原表。返回值是mytable
    getmetatable(mytable) -- 获取mytable的元表

    注:如果设置好元表,为了保护元表不再被修改可以设置__metatable健

    mytable = setmetatable({'python','lua','ue4'},{__metatable = 'lock'})
    print(getmetatable(mytable)) --输出:lock

    __index 元方法

    若访问键没有值,那么就寻找该table的metatable中的__index 键

    1.__index包含一个函数,Lua就会调用那个函数,固定参数:table普通表,key不存在的键

    other = function(tab,key) --参数固定,tab为普通表,key为不存在的键
        return 'one'..key
    end t = setmetatable({},{__index = other }) print(t.name) --输出:onename

    2. __index包含一个表格,Lua会在表格中查找相应的键

    other = { foo = 3 }
    t = setmetatable({}, { __index = other })
    t.foo --输出:3

    __newindex 元方法

     若给表的一个缺少的索引赋值,那么就寻找该table的metatable中的__newindex 键

    mymetatable = {}
    mytable = setmetatable({key1 = "value1"}, { __newindex = mymetatable })
    print(mytable.key1) --输出:value1
    
    mytable.newkey = "新值2"
    print(mytable.newkey,mymetatable.newkey) --输出:nil,新值2
    
    mytable.key1 = "新值1"
    print(mytable.key1,mymetatable.key1) --输出:新值1,nil
  • 相关阅读:
    激活第一个CPU
    每CPU变量
    在 Vue中使用layui日历控件,标注重要日子
    手机号,银行卡断开方式
    下载文件流
    使用class关键字创建类组件、props参数
    class继承关键字extends和super
    用于判断文件是已什么结尾的
    flex一些属性
    类组件
  • 原文地址:https://www.cnblogs.com/hhs1998/p/15732880.html
Copyright © 2011-2022 走看看