本篇文章是Lua设计与实现专栏的第四篇,主要结合了《Lua设计与实现》书中的第4章(表),以及lua5.3源码进行一些总结,由于原书中主要是基于lua5.1进行书写的,所以可能会有跟书中列举代码不一致的地方,不过大体上是保持一致的。
Table的设计哲学
table应该算是lua最灵魂的一个结构了。它有以下特点:
- 容器功能:与其他语言相似,lua也内置了容器功能,也就是table。而与其他语言不同的是,lua内置容器只有table。正因为如此,为了适配不同的应用需求,table的内部结构也比较考究,分为了数组和哈希表两个部分,根据不同需求来决定使用哪个部分。
- 面向对象功能:与其他语言不同的时,lua并没有把面向对象的功能以语法的形式包装给开发者。而是保留了这样一种能力,待开发者去实现自己的面向对象。而这一保留的能力,也是封装在table里的:table里可以组合一个metatable,这个metatable本身也是一个table,它的字段用来描述原table的行为。
lua是一个短小精悍的语言,之所以把这么多功能全都聚合到table结构中,我的理解是,它不想让开发者去关心过多的类型,能够真正做到table在手,天下我有。同时,虽然table要兼具这么多的功能&