返回首页 - Notes - 2011

Lua 表结构


Luatable(表)相当于 Perl hash(哈希)或 Pythondict(字典)

table 既不是“值”,也不是“变量”,而是“对象”,一种可以动态分配的对象

table 没有专门的声明语句,它是通过构造表达式来完成建立的

table 是匿名的,一个 table 变量与 table 自身没有任何固定的关联性,当 table 变量的所有引用都被赋值为 nil 时,这个 table 也就被宣告消失了

如果 table 的某个元素没有初始化,则该元素的值将是 nil

对于 tab['name'] 这样的元素引用,可以简写为 tab.name,就像引用类的元素一样。注意,这种用法只适用于字符串索引,对于数字索引不适用

如果 table 的索引下标全部使用整数,则该 table 就变成了传统的数组,但不同的是,这样的 Lua 数组通常以下标 1 开始,而不是 0

table 变量名前面放置一个 # 号可以获得该 table 的最后一个索引值,对于数组则对应于该数组的长度(下标从 1 开始)

Lua 中,几种长度操作符的惯用法

  1. print(tab[#tab]):打印最后一个元素的值
  2. tab[#tab] = nil:删除最后一个元素
  3. tab[#tab + 1] = 'Ruchee':在数组末尾添加新值

特别注意:使用数字 0 和字符串 '0' 来索引一个 table 是不同的,这是两个不同的元素


table的构造方式

方式一:days = {'Sunday', 'Monday', 'Tuesday'}。这将初始化 days[1] = Sundaydays[2] = Mondaydays[3] = Tuesday

方式二:nums = {x = 10, y = 20, z = 30}。这将初始化 nums['x'] = 10nums['y'] = 20nums['z'] = 30,亦即 nums.x = 10nums.y = 20nums.z = 30

方式三:可以在 table 中嵌套 table,相等于多维数组的形式

table 中允许使用分号来代替逗号,这一般是用来将列表部分与记录部分显式区分的,如:tab = {x = 10, y = 45; 'one', 'two', 'three'}


date : 2011-10-01