迭代器与泛型for:
1、外部迭代工厂只负责迭代器的控制变量的产生,其核心迭代在内部函数内完成,会在每一次的迭代时产生闭包,进行迭代。
2、无状态的迭代器:迭代器的三个状态主要是迭代表、状态常量和控制变量,无状态迭代器例子是ipars(循环遍历数组)
3、多状态的迭代器:不使用闭包,采用函数局部变量的域来保存并返回迭代函数及其状态。
协程:
1、协程类比于线程,拥有自己的栈、局部变量、指令空间、与其他协程共享全局变量。不同于线程,在某一时刻只能由一个协程在运行,多线程可以同时运行多个线程。
2、协程在第一个yield处被挂起,协程将额外的参数传递给协程的主程序。
3、半协同,挂起一个正在执行的协程函数与重新执行一个已经挂起的协程函数是不同的。
管道与过滤器:
1、生产者与消费者的关系时,过滤器在两者之间进行转换,将生产者的产品转化为消费者的用品,在管道方式下,一个生产者在一个独立的进程内运行,在协同方式下,生产者和消费者之间进行状态的转换,这样减少了进程之间的切换通信的代价。
2、coroutine.create与coruntine.warp,create创建一个协程,返回一个协程,与resume配合开启协同,warp返回函数,当调用函数时,与create相同,开启协同。
非抢占式多线程:以多任务下载为例,使用协同机制,通过分配器唤醒不同的协程,尽可能多的使用资源。
lua的数据结构:其主要数据结构均由table完成。
队列的实现:(这里使用右侧入队,左侧出队)由于lua的table的下标无限制,设置两个下标作为队列的队头和队尾,队头入队,队头下标加一,队尾出队,队尾下标加一。
可变字符串:类似于StringBuffer与StringBuilder,lua使用table.concat将一个table内的字符串连接起来,提高效率,减少垃圾。
字符串匹配:使用模式定义模式串,来进行查找匹配。定义符的大小写区分表示代表的集合的互补。
字符类:. 任意字符
%a 字母
%c 控制字符
%d 数字
%l 小写字母
%p 标点字符
%s 空白符
%u 大写字母
%w 字母和数字
%x 十六进制数字
%z 代表 0 的字符
捕获:使用模式串的一部分匹配目标串的一部分,