开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   18803836360

lua中对表的操作

个人分类: lua | 2017-11-13 17:15
lua中的元表与方法

__ 为两个_ _相连
--编写元表中的事件和方法
t1={}
t2={}

t={}
t.__add=function ( ... )
    -- body
    print("执行相加的方法")
end

--两表相加,会自动找原表中的__add,执行事件后边的元方法
setmetatable(t1,t)
tt=t1+t2
print(tt)

--两个表之间进行操作时,两个表中的其中一个必须要指定为元表
--进行加减乘除或者其他指定操作时,会自动查找元表的事件 ,执行=号右边的函数
--我们称元表中的键为事件(event),称值为 元方法(metamethod)。前述例子中的事件是"add",元方法是执行加法的函数。
--默认操作两个表是错误的,需要先指定元表才能进行指定的操作

--__index:查找表中不存在的元素  ,到元表中查找__index
t={}
t.__index=function ( table,key)
    -- body
    print("没有该key:" .. key)
end
t1={name="yy"}
print(t1.age)

setmetatable(t1,t)
print(t1.name)
print(t1.age)


--传入参数
--[[local  j1={"aa",11}
local j2={"bb",22}

j={}
j.__add=function ( t1,t2 )
    -- body
    print(t1[1])
    print(t1[2])
    return "+"
end
setmetatable(j1,j)
jj=j1+j2
print(jj)
--]]
--[[local z1={55,44}
local z2={33,22}

local  zz={}
zz.__sub=function (x1,x2 )
    -- body
print(x1[1]-x2[1])
print(x1[3])
return "-"
end

setmetatable(z1,zz)
z=z1-z2
print(z)
]]
--[[
local  t=
{
    __add=function ( tt1,tt2 )
        -- body
        print("我是加法操作啊")
    end,
    __sub=function ( ... )
        -- body
        print("我是减法操作啊")
    end,
    __div=function ( ... )
        -- body
        print("我是乘法操作啊")
    end,
    __mul=function ( ... )
        -- body
        print("我是除法操作啊")
    end,
}
t1={}
t2={}

setmetatable(t1,t)
tt=t1*t2
tt=t1/t2

tt=t1-t2
tt=t1+t2
]]
方式一:
--__index:查找表中不存在的元素  ,到元表中查找__index
--[[
t={}
t.__index=function ( table,key)
    -- body
    print("没有该key:" .. key)
end
t1={name="yy"}
print(t1.age)

setmetatable(t1,t)
print(t1.name)
print(t1.age)
]]
方式二
t=--设置元表
{
    __index=function (table,key)   --指定元表的键,对应的值,    即事件对应的方法
        -- body
        print("aaa")                 --输出
        name="c"                    --指定
        return name                    --返回
    end
}

t2={}
setmetatable(t2,t)                    --指定元表
print(t2.gae)                        --输出


-- __index->事件对应了一个方法
--如果是函数,那么执行函数

-- __index->事件对应了一个表
-- 如果是表,那么就在表中查找对应的key    没有返回空
--[[t={}

t.__index={name="yyy"}           --可以直接写表,也可以写写好的表的名字
t1={}
setmetatable(t1,t)
print(t1.name)
]]
0 0

作者的其他最新博客

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号

个人分类

标签

阅读排行

评论排行

推荐博客

最新博客

返回顶部