目录
闭包函数
作用
延长局部变量的生命周期
应用
迭代器
function AddNum()
local i=1
return function()
i=i+1
return i
end
end
func = AddNum()
print(func())
print(func())
print(func())
文件加载
准备:
lua2文件在同一个文件夹下,加载子层级时可以用 / 和 .
print(“ccccc”)
function AA( )
print(“aaaa”)
end
local function BB( )
print(“bbbb”)
end
local tab = { func =BB }
return tab
loadfile
loadfile(“模块名称/文件名”)
只加载不执行,无法调用该文件中任何语句
loadfile返回值是一个函数,执行函数
编译该文件
f = loadfile("lua2.lua") --注意同一个文件夹下
f()
AA()
dofile
dofile(“模块名称/文件名”)
加载并且执行,加载一次,执行一次
dofile "lua2.lua"
dofile "lua2.lua"
AA()
require
require “文件名 不加后缀”
加载并执行文件,加载多次,只执行一次
require "lua2"
AA()
可以获取文件的返回值,并且使用
tab01 = require "lua2"
tab01.func()
lua协成 coroutine
挂起 正在运行 结束 正常
suspended running dead normal
function TextCo1(a,b)
print(a,b)
print(coroutine.status(co1))
1.创建协程
//coroutine.create
co1 = coroutine.create(TextCo1)
2.开启协程
coroutine.resume
首次开启协成时,参数传递给协成函数
coroutine.resume(co1,10,20)
print(coroutine,status(co1))
3.挂起协程 coroutine.yield
yield 的返回值 = resume 的参数
resume的返回值 对应yield的参数
cc = coroutine.yield()
print(cc)
end
4.恢复协程
coroutine.resume(co1,56)
print(coroutine.status(co1))
结果:
suspended
10 20
running
suspended
56
dead
实例 2个协成的例子
在协成1中开启另一个协成2,协成1的状态为normal
return 执行后,不会执行end,协成1就会继续向下
function PrintState()
print("co1 state :" .. coroutine.status(co1))
print("co2 state :" .. coroutine.status(co1))
end
function Co1Func(a)
print("co1 :" .. a)
printstate()
s,rt = coroutine.resume(co2,2)
print("co1 resume return:" .. rt)
s,rt = coroutine.resume(co2,4)
print("co1 resume return:" , rt)
end
function Co2Func(b)
print("co2 :" .. b)
printstate()
yreturn = coroutine.yield(3)
print("co2 yreturn :" .. yreturn)
-- coroutine.yield(5)
end
co1 = coroutine.create(co1Func)
co2 = coroutine.create(co2Func)
coroutine.resume( co1,1)
printstate()
结果
co1 :1
co1 state: running
co2 state: suspended
co2 : 2
co1 state: normal
co2 state: running
co1 resume return: 3
co2 yreturn: 4
co1 resume return: nil
co1 state:dead
co2 state:dead