function(函数)

在Lua中,函数是被看作“第一类值(First class Value)”。函数可以存在变量里。function可以以匿名函数(anonymous function)的方式通过参数传递。

thread(线程)

在Lua中,最重要的线程是协同程序,它跟线程差不多,拥有自己独立的栈,局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

userdata(自定义类型)

userdata是一种用户自定义数据,用于表示一种由应用程序C/C++语言库所创建的类型,可以将任意C/C++的任意数据类型的数据(通常是struct和指针)存储到Lua变量中调用。


Lua变量

变量在使用之前,必须在代码中声明,即创建该变量。Lua变量有三种类型:全局变量,局部变量,表中的域。

Lua中的变量全是全局变量,哪怕是语句块或是函数里,除非用local显式声明为局部变量。局部变量的作用域为从声明位置开始到所在语句块结束。

Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。

例:a,b = 10,2*x <---> a=10;b=2*x

遇到赋值语句Lua会先计算右边所有的值,然后再执行赋值操作,所以我们可以这样进行交换变量的值。

例:x,y=y,x ----- swap "x" for "y"

a[i],a[j] = a[j],a[i] ------ swap"a[i]" for "a[j]"

当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:

a.变量个数>值的个数

按变量的个数补足nil

b.变量个数<值的个数

多余的值会被忽略

应尽可能的使用局部变量,有2个好处:

1.避免命名冲突

2.访问局部变量的速度比全局变量更快


索引

对于table的索引使用方括号[ ],Lua也提供了“ . ”操作

t[i];

t.i-----当索引为字符串类型时的一种简化量

getable_event(t,i)-----采用索引访问本质上是一个类似这样的函数调用。