lua元表与元方法

元表

1.首先我们先了解下lua的表

  • 表(table):一种数据结构,使用关联型数组,你可以使用任意类型的值来做数组的索引,但这个值不可以是nil,容量大小不是固定的
  • 创建:表名 = {元素1,元素2,…},也可以不写元素比如t1 = {}这样这就是一张空表(注意取名时不可以是关键字table)
  • 插入:table.inster(表名,元素)
  • 排序:table.sort(表名,方法)(这里的方法可以不写,默认为升序,元素下表为数字)(方法:function( a,b )
    return a>=b
    end)
  • 删除:table.remove(表名,位置)

2.元表
· 是用来定义对table操作的方式表
· 我们先来看一下问题
t1 = {1}
t2 = {2}
我们把这两张表拼起来
第一种方法
table.inster(t1,t2[1])
第二种方法

--元表
mt = {}
--方法类似于c++的运算符重载可以看出我们重载的是+
 mt.__add = function( t1,t2 )
  local  temp = {}
  for _,v in pairs(t1) do
    table.insert(temp,v)
   end 
   for _,v in pairs(t2) do
    table.insert(temp,v)
   end 
   return temp
 end
 t1 = {1,2}
 t2 = {1}
setmetatable(t1,mt)
--t3中就存了t1,t2的元素
 t3 =t1+t2

3.元方法(双_)
· __index
用来对表访问,但访问时发现表中没有这个键值那么就会从设置的metarable中找到__index所对应的表中找键值没有为nil
案例

other = {foo=3}
t={}
setmetatable(t,{__index = other})
print(t["foo"])--3
print(t["foo1"])--nil

· __newindex
就是在对表进行缺少赋值时比如t1.newkey = 6就会查找__newindex对应的表然后存进去
案例

mytable1 = {}
mytable2 = {key1 = "value"}
 setmetatable(mytable2,
 {__newindex = mytable1})
print(mytable2.key1)--value
mytable2.newkey = "new1"
print(mytable2.newkey,mytable1.newkey)--nil new1
mytable2.key1 = "new2"
print(mytable2.key1,mytable1.key1)--new2 nil(因为有这个键值)
mytable2[1] = 1
print(mytable2[2])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值