Lua是一种动态类型的语言,它只有几种基本的类型:nil,boolean,number,string,userdata,function,thread和table。Nil,boolean,number,string这些与其它语言都类似。由于Lua实现了动态内存管理,所以在使用string的时候无须担心内存分配和释放问题。
在Lua中,function就是值,可以被存储在一个变量中,可以做为另一个function的参数,可以做为返回值被返回。
Userdata表现了一块原始的内存区域,它可以被存储在变量中,在Lua中没有对userdata的预定义操作,除了赋值和相等测试。Userdata不能在Lua中创建和修改,只能通过c api来操作userdata。Userdata表现了一个句柄的概念,你可以在Lua中持有它,可以交给任何c cpi来操作它,但是不能在Lua中改变它。
Thread表现了独立执行的线程,被用来实现coroutines。
Table是Lua中唯一的数据结构,它提供给我们非同寻常的表达能力,在Lua中,你可以用Table来表现一个Array,dynamic array,List,Set,queue,map等等,所有这些都可以使用table,用一种简单的一致的方式来表达。
在Lua中,table既不是值,也不是变量,实际上,它是Lua中的对象,我们不能声明一个Table,只能通过Table的构造器创建一个Table:
A = {}
在Lua中,Table永远都是匿名的,在上面的语句中,我们创建了一个table,然后让变量A引用到这个table,这意味着,在一个引用到一个table的变量和table本身之间没有固定的关系。从下面这个例子可以看出:
A = {}
A.name = “Lua”
B = A
A = nil
print(B.name)
程序将输出”lua”而不是nil
当程序不再用到一个table时,lua内存管理器将自动释放其内存。