Lua的Table学习疑问

Lua里面的Table类似于C++里面的map,它里面的元素是一个键值对(key-value),所有的Table都可以用不同类型的索引来访问valu(值),当需要容纳新条目(entry)时,table会自动增长。Lua对于诸如a["name"]的写法提供了一种更简便的”语法糖(syntactic sugar)“,可以直接输入a.name

因此a.x= 10等同于a["x"]= 10,初学者常常会将a.x和a[x]搞错,前者表示a["x"],表示以字符串"x"来索引table,而后者是以变量x的值来索引table,见下面例子:

a= {}
x= "y"
a[x]= 10
print(a[x])   --10
print(a.x)     --nil
print(a.y)     --10
--其实总的来说,语法糖就是用a.x等同a["x"]

个语法糖比较容易让初学者迷糊,但是联系到后面的table构造式之后,又让初始者更加迷糊,我们先来看table构造式:

构造式是用于创建和初始化table的表达式,是Lua最有用、最通用的机制之一。

如果只是指定了value而没有key。如: days= {"S", "M", "T", "W", "T", "F", "S"},那么"S"就默认为days[1]

然后Lua还提供了一种特殊的语法用来初始化记录风格的table

a= {x=10, y=20},这段chunk等于 a={}; a.x= 10; a.y= 20。看到这里我瞬间凌乱,Fuck Lua a.x不是”语法糖“么?

其实在Lua的语法中a= {x=10, y=20}等价于 a={["x"]=10, ["y"]= 20},有点繁琐扯蛋,这或许就是灵活性带来的坏处吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值