1、索引
theTable = {eg1=23, 45, eg2=67, 89, [3]=10}
没有键且未分配下标会从1开始分配下标,包括nil
,有键的值可以通过下标和键索引,自动分配的下标会覆盖人为分配的下标
theTable['eg1'] == 23
theTable.eg2 == 67
theTable[1] == 45
theTable[2] == 89
theTable[3] == 10
2、遍历
#table
:表内元素的数量
theTable = {a=100, 10, 20, [5]=30, nil, nil, b=200, "sss"}
pairs
:忽略nil
,继续遍历
for key, value in pairs(theTable) do
print(key, value)
end
1 10
2 20
5 sss
a 100
b 200
ipairs
:没有键或未分配下标的值遍历到第一个nil
前
for key, value in ipars(theTable) do
print(key, value)
end
1 10
2 20
3、函数
rawget(table, key)
返回table
表的key
键 对应的值
rawset(table, key, value)
设置table
表里key
键的值为value
table.concat (table [, sep [, start [, end]]])
列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
table.insert (table, [pos,] value)
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾。
table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认从最后一个元素删起。
table.sort (table [, comp])
对给定的table进行升序排序。
4、元表
setmetatable(table, metatable)
将metatable
设置为table
的元表,并返回table
,如果元表存在_metatable
键值则会失败
getmetatable(table)
获取table
的元表
1、__index
- 通过某个键访问
table
,若没有此键, 那么返回table元表
的__index
键 - 若
__index
对应一个表,则会在该表中查找此键 - 若
__index
对应一个函数,则调用函数(table, key)
a = {}
b = {}
c = {eg = "lalala"}
setmetatable(a, b)
b.__index = c
print(a.eg) -- lalala
a = {}
b = {}
setmetatable(a, b)
b.__index = function(table, key)return key end
print(a.eg) -- eg
2、__newindex
- 给
table
的某个键赋值,若没有此键,那么赋值给table元表
的__newindex
键 - 若
__newIndex
对应一个表,则会在此表中创建该键,并赋值 - 若
__newindex
对应一个函数,则调用函数(table, key, value)
a = {}
b = {}
c = {}
setmetatable(a, b)
b.__newindex = c
a.eg = 123
print(c.eg) -- 123
a = {}
b = {}
setmetatable(a, b)
b.__newindex = function(table, key, value) rewset(table, key, value) end
a.eg = 666
print(a.eg) -- 666
3、__call
把table名
当函数使用时,就会访问table元表
的__call
键,调用其对应的函数并传参,默认将table
作为第一个参数,设计对应函数时要预留这个参数位
a = {}
b = {}
setmetatable(a, b)
b.__call = function(table) print("123") end
a() -- 123
a = {}
b = {}
setmetatable(a, b)
b.__call = function(table, prox) print(prox) end
a("123") -- 123
4、__tostring
直接打印table
时会调用table元表
的__tostring
键对应函数,打印其返回值
a = {}
b = {}
setmetatable(a, b)
b.__tostring = function() return "hahaha" end
print(a) -- hahaha
5、补充
require
用法:引入某个文件的非本地函数,并返回某个(本地)函数
a.lua
function fuc1()
print("aaa")
end
local function fuc2(prox)
print(prox.."bbb")
end
return fuc2
b.lua
local fucb = require(a)
fucb("你好") -- 你好bbb
fuc1() -- aaa