元表
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])