lua是一种动态类型语言;lua中的8种基础类型是:
nil, boolean, number, string, userdata, function,thread, table
函数type()可根据一个值返回其类型名称;
nil是一种类型,只有一个值;一个全局变量在第一次赋值前的默认值就是nil,
将nil赋予一个全局变量等同于删除它;
boolean类型有两个值false和true;lua中只将false和nil视为假,其它一切值皆为真;
number类型用于表示实数;
string类型表示一个字符序列,lua中的字符串是不可变的值,它和其它lua对象一样,
都是自动内存管理机制所管理的对象;字母字符串需要以一对匹配的单引号或双引号来界定;
lua提供了运行时的数字与字符串的自动转换;在lua中,".."是字符串连接操作符;
在数字后面使用“..”时,必须要用空格分隔它们;
#操作符用来获取字符串的长度
table(表) table实现了关联数组,关联数组是一种具有特殊索引方式的数组;
不仅可以通过整数来索引它,还可以使用字符串或其他类型的值(除了nil)来索引它;
table没有固定的大小,可以动态地添加任意数量的元素到一个table中。
当需要容纳新的条目时,table会自动增长。
table是lua中主要的(事实上也是仅有的)数据结构机制,具有强大的功能;
在lua中table是动态分配的“对象”,程序仅持有一个对它们的引用(或指针),lua
不会暗中产生table的副本或创建新的table。
table的创建通过构造表达式{}来创建;
table永远是匿名的,一个持有table的变量与table自身之间没有固定的关联性。
当程序中再也没有对一个table的引用时,lua的垃圾收集器最终会删除该table,
并复用它的内存;
当table中的某个元素没有初始化时,它的内容就为nil。如果将nil赋值给table
中的某个元素就会删除该元素;
lua中的语法糖 ---- a["name"] ==a.name
a.x与 a[x] 的区别:
a.x表示 a["x"],表示以字符串"x"来索引table;
a[x]表示以变量x的值来索引table。例如
a = {}
x = "y"
a[x] = 10 --将10放入字段"y"
print(a[x]) --> 10字段"y"的值
print(a.x) -->nil字段"x"未定义的值
print(a.y) -->10 字段"y"
lua的习惯,数组通常以1作为索引的起始值;
长度操作符#用于返回一个数组或线性表的最后一个索引值;
lua中将nil作为界定数组结尾的标志;如果需要处理那些含有"空隙"的数组,
可以使用table.maxn,它将返回一个table的最大正索引数;例如
a = {}
a[10000] = 1
print(table.maxn(a)) --> 10000
function在lua中函数是作为"第一类值"来看待的。这表示函数可以存储在变量中,
也可以通过参数传递给其它函数,还可以作为其它函数的返回值;
lua既可以调用自身lua语言编写的函数,又可以调用c语言编写的函数;lua所有的
标准库都是用c语言写的。(第5章 第26章)
userdata和 thread
usedata类型可以讲任意c语言数据存储到lua变量中;
第九章解释thread类型;