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类型;