06,Lua 基本数值类型(2)

来源:互联网 发布:linux远程连接命令 编辑:程序博客网 时间:2024/05/20 16:14

       table是Lua中主要的也是仅有的数据结构机制,具有强大的功能。基于table可以以一种简单、统一和高效的方式来表示普通数组、符号表、集合、记录、队列和其他数据结构。

   Lua中也是通过table来表示模块(module),包(package)和对象(object)的。

   table类型实现了"关联数组","关联数组"是一种具有特殊索引方式的数组;可以在“关联数组”中使用整数、字符串或其他类型的值(nil除外)来索引它。Lua里表的默认初始索引从1开始。此外,table没有固定的大小,可以动态的添加任意数量的元素到一个table中。

   在Lua中,table既不是“值”也不是“变量”,而是“对象”。可以将一个table想象成一种动态分配的对象,程序仅支持有一个对它的引用(或指针),Lua不会暗中生成table的副本或创建新的table。此外Lua中也不提供对一个table表对象的声明。通过“构造表达式”方式完成table表的创建,最简单的构造表达式就是{}。


table 永远是"匿名的",一个持有table的变量与table自身之间没有固定的关联性。


一个程序中,当没有一个变量指向这个table时,也就是说这个table再也没有一个引用时指向它自己时,Lua的垃圾收集器会最终删除该table并复用它的内存。

   所有table都可以有不同类型的索引来访问value值,当需要容纳新条目时,table会自动增长。


当Lua表中某个元素没有初始化时,这个元素的内容就是nil;另外可以像全局变量一样,将nil赋予table的某个元素来删除该元素。

   为了表示一条记录,可以将字段名作为索引。lua中有“语法糖”的概念,以下两个索引方式是相等的:

   

若是要表示一个传统的数组或线性表,只需以整数作为key来使用table即可。Lua中数组通常以“1”作为索引的起始值。

    在Lua5.1中,长度操作符“#”用于返回一个数组或线性表的最后一个索引值

[table的元素中尽量不要使用一个或多个nil作为元素数值(也不推荐)。这样的话再使用"#"操作符时会导致长度获取不正常,还有就是删除元素时,可以使用table.remove的方式]

    对于所有未初始化的元素的索引结果都是nil。Lua将nil作为界定数组结尾的标志。当一个数组有“空隙”时,即中间含有nil时,长度操作符会认为这些nil元素就是结尾标记。如果需要处理那些含有“空隙”的数组,可以使用函数table.maxn,它将返回一个table的最大正索引数:


    当对索引的实际类型不是很确定时,可以明确地使用一个显示的转换:

    


原创粉丝点击