Lua: pairs和ipairs,协程

贴一个大神的博客: https://blog.codingnow.com/2018/10/lua_gc.html
1,pairs和ipairs的区别:
pairs:可以遍历表中所有的key
ipairs:按升序遍历,如果key的值不连续,则断开

tab={[1]="a",[2]="b",[4]="c"}

for k,v in pairs(tab) do
 print(k,v)
end

for k,v in ipairs(tab) do
print(k,v)
end

pairs:按照下标的分类的顺序输出,但是顺序不一定是升序
ipairs:若table中的下标key连续,则按照key的大小升序输出(定义顺序不影响输出)

tab={[2]="b",[1]="a",[3]="c",["two"]="yes",[4]="d"}
print("pairs输出:")
for k,v in pairs(tab) do
 print(k,v)
end
print("ipairs输出:")
for k,v in ipairs(tab) do
print(k,v)
end
pairs输出:
2	b
3	c
1	a
4	d
two	yes
ipairs输出:
1	a
2	b
3	c
4	d

2,协程是什么
进程:正在运行的程序
线程:进程内相对独立的,可调度的执行单元。是系统独立调度和分派CPU的基本单位。
协程: 在任意时刻只有一个程序在执行,不能实现并行运行。
主要函数:

--创建一个协程,输入参数是一个函数,返回一个新的协程(用co接住)
co=coroutine.create(f);
--运行一个协程co,val1....将作为参数,传入协程中的函数
coroutine.resume(co,val1,...)
--示例:
function f(a,b)
 print(a+b)
end

co=coroutine.create(f)
coroutine.resume(co,1,2)
--输出为3


coroutine.yield(val1,val2)

yield的功能以图片中为例
Lua: pairs和ipairs,协程_第1张图片
协程C1第一次调用协程C2的时候,C1中resume的输入参数p1,p2将作为C2中funtion f()的输入参数。而C2中,yield中的v1,v2作为C1中的resume的返回值,在C2结束时,返回v1,v2的值给C1,C1继续执行直到结束。

你可能感兴趣的:(LUA)