LUA的表

本文详细介绍了Lua中的表操作,包括索引、遍历、函数使用,如rawget和rawset。同时,深入探讨了元表的概念,如__index、__newindex、__call和__tostring等特性,以及它们在表访问和赋值时的作用。通过实例展示了元表如何影响表的行为。最后,提到了require函数的用法,用于导入和使用其他文件中的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值