简单理解Lua

1 Table

1.1 Table简单理解就是一种特殊索引的特殊数组。

特殊索引指:不仅使用某种特定索引,可以使用包括:字符串、其它任意类型值(包括Boolean,number,function,table,除了nil),简单而言就是常量值,table的索引必须是已知值,所以使用变量作为索引值也能理解为以上所列出的索引值。

t={}
var="index"
t[var]=1000 -- 等同于 t["index"]
特殊数组:Table的值可以为任意类型值,可以将Table表示为:普通数组、符号表、集合、记录、队列等数据结构,同时Lua中的模块(module)、包(package)和对象(object)也是使用Tabable实现的

可以将Table理解为一种索引数组:

t["index"] = "value"

1.2 访问Table的值:使用索引对值进行新增,修改,读取

为了更方便的访问Table,可以将Table作为一条条记录访问,索引t["name"]提供了一种更简便的写法t.name,这是一种语法糖,此时的理解是,可以将name作为table的一个字段,是一种固定的预定义的索引Key,其实本质只是对字符串索引的一种简写,注意:使用字段(.)方式访问只适用于字符串索引。

所以a.x和a[x]是完全不等价的,第二个中x必须是一个已定义变量,否则a[x]就是一个Nil,以下是一个例子说明字段(.)访问的本质

a={}

a.x = 10 	-- 等价于a["x"]
print(a.x)  	-- 10

x="y"
a[x] = 20 	-- 等价于a["y"]或a.y
print(a[x]) 	-- 20
print(a["y"])  	-- 20
print(a.y)  	-- 20
其它类型值只能使用特定的索引方式: t["index"] = "value"

1.3 Table的构造式

初始化数组的方式:索引是整数,从1 开始

t={}
t={"1", "2", 1, 2, true}
print(t[1])  --  "1"
print(t[3])  --  "1"
print(t[5])  --  "true"
最基本的索引方式:t = {["index"]="value"},索引可以为其它非Nil已知的值
t={}
t={[0]="1", ["2"]="2", ["x"]=3}
print(t[0])	-- "1"
print(t["2"])   -- "2"
print(t["x"])	-- "3"
print(t.x)	-- "3"
使用记录(.)风格的初始化方式
t={x=1,y=2} -- 等价 t={}; t.x=1; t.y=2,
--其实就是:
t={["x"]=1,["y"]=2}
print(t.x)    -- "1"
print(t["x"]) -- "1"
更经常使用的是混合的初始化方法,可以使用(;)分隔不同风格的初始化,重复索引会被覆盖,数组风格初始化值会从1开始,不会被覆盖

t={[0]=0; x=1,y=2; [1]={1,2,3}; 1000, [1]=0}
for k,v in pairs(t) do print(k,v) end 
--1       1000
--0       0
--x       1
--y       2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值