Require
require可以访问在其他文件中的全局变量或者全局函数。如果在其他文件夹下面则要加上文件夹名的路径。不需要加.lua的后缀,因为lua中会自动匹配。
但是无论require几次都只会访问一次。如下,只运行一次加法。
可以在package,path中添加路径
lua中用require实现库的调用
迭代器
在lua的table中,数字下标的table可以直接for循环对数组下标进行迭代
纯数字下标且连续的table 可以用ipairs()对table进行迭代遍历,其效果与for循环完全相同。
但是当数字下标不连续时,迭代器读到nil便会停止遍历。
面对字符串下标的,可以用pairs()对table中所有类型的下标进行遍历。会将所有的下标全部迭代出来(注意下面代码块与上面ipars的区别)
pairs迭代器中是用next函数实现,next函数效果如下(如果table为空,next会打出nil,可以用来检查table是否为空。)
字符串
在lua中字符串中是一个字节一个字节存储,每个字节存储的是一串数字(ascll码)。可以存储任何byte值,能存0且不会丢失。
字符串中有序号,从1开始
如下,对字符串第一个byte打出(1,表示下位1),结果为49,即0x31。右边为语法糖表示
也可以用byte打印出字符
如下证明了字符串中能存取任何数字
lower能把大写字母打印成小写,但打印是一个副本,即不会影响原始变量
sring.find 可以找到模板字符串在变量字符串中的位置,并返回模板在字符串中的起始位置(索引)
string.match则在字符串中返回模板
正则匹配
可以用一些符号在字符串中或某一位置后搜寻特定的字符,每种字符由特定的符号表示
如下%d表示搜寻数字
比如搜寻d带上后面两个数字
可以用[]中选取多种可选匹配,如下
d后面可以匹配一个数字或字母
括号的使用
gsub可以用做替换。
gmatch可以做迭代器,输出所有模板
协程
lua支持协程(实际上并不是多线程,而是分时复用),被赋值为协程的变量为thread类型,创建一个协程如下。
不会直接执行,需要用resume来启用,resume可以开始一个协程,也能继续一个协程,yield则可以暂停一个协程,并返回一个值
lua协程有状态,还没开始或者用yield暂停状态为“suspended”,正在运行则为“running”,调用其他协程暂时挂起为“normal”,结束则为“dead”,一个协程dead则不能再调用。