Lua语言简介
简介
Lua是一门小巧的脚本语言,由巴西里约热内卢天主教大学的Roberto Ierusalimschy等人于1993年开发,在现代企业开发中Lua通常被作为胶水语言,在游戏领域应用尤为频繁。
Lua中的数据类型
Lua中定义以下几种数据类型
1、Nil
nil是一个特殊的数据类型,它只有一个值,就是nil,他的作用就是为了区别其他的值
2、Boolean
和其他语言一样,布尔值只用true和false两个值
3、Number
用来表示实数的类型,包含整数和浮点数,Lua中number类型可以表示32位整数
4、String
string类型用来表示一个字符串,Lua中的字符串是不可变类型,此外Lua也存在数字和字符串之间的隐式转换
1 |
|
5、table
table类型实现了一种特殊的数组,特殊之处在于该数字的索引方式,传统的数组索引是通过数组下标来实现的,二table不仅能以整数来索引,还可以使用字符串和其他类型的值进行索引。
table没有固定的大小,可以在里面放入任意数量的元素,下面的例子简单展示了table的用法
1 | a = {} //声明一个table |
Lua定义一个函数
Lua没有使用大括号来规定函数的作用域,而是使用end关键字来作为结束的标记
eg:
1 | function add(a) |
es6中有关于函数的新特性和Lua中的函数有一些相似之处:
- 多重返回值
- 变长参数
一个Lua函数可以返回多个值,值需要在return后面列出需要返回的值即可,用逗号隔开
eg:
1 | funcion foo() |
尝试使用print语句来打印foo函数的执行结果,会输出“a”,“b”。
如果使用表达书的形式来调用foo函数,会依照解构赋值额原则来赋值
1 | x = foo() //x = "a","b"被丢掉 |
可变参数,这个特性即为es6中的spread运算符,函数可以接收任意长度的参数。
1 |
|
Lua中的协程
Lua设计之初就提供了对协程的支持,跟同时期的其他编程语言相比无疑是超前的,Lua将所有协程相关的函数放在一个名为coroutine的table中,一个协程其实就是一个特殊线程,它可以由用户控制状态的切换。
1、coroutine.create()
创建一个coroutine 并返回,参数是一个函数。
eg:
1 | function log(i) |
我们声明了一个log方法,并用其作为参数创建一个协程,这代表print方法的执行可以被用户终端或恢复。
2、coroutine.resume()
重启coroutine,和create配合使用
上面的diamante新建了一个协程之后并不会直接运行,而是要靠resume方法来启动。
1 | coroutine.resume(c0,1) --1 |
3、coroutine.yield()
将coroutine设置为挂起状态,可以由resume来恢复执行
1 | function log(i) |
coroutine.status()为查看coroutine的状态
一个协程可以有三种不同的状态
- suspended
- running
- dead
当创建一个协程后,协程默认处于suspended状态,使用yield挂起后状态同样转换为suspended。
4、coroutine.running()
返回当前协程的线程号