LUA------多脚本执行;特殊用法;协程

多脚本执行

print("Test测试")
testA="123"
local testLocalA="456"



print("*******多脚本执行********")
print("*******全局变量和本地变量********")
for i=1,2 do
	c="小明"
end
print(c)

--局部变量关键字 local
for i=1,2 do
	local d="小王"
	print("循环中的d")
end
print(d)



print("*******多脚本执行********")
--关键字 require("脚本名") 或者单引号,重复加载也只会执行第一次
require("Test")
--执行过这个脚本,就可以用它里面的全局变量
print(testA)
--局部变量不行,要得到局部就在那个脚本里return,然后在当前脚本里赋给一个local变量
print(tastLocalA)



print("*******脚本卸载********")
--package.loaded["脚本名"]
--返回值是Boolean,意思是该脚本是否被加载
print(package.loaded["Test"])
--想卸载就置空
package.loaded["Test"]=nil
print(package.loaded["Test"])


print("*******大G表********")
--重要
--_G表是一个总表,它将我们申明的所有的全局变量都存储在其中
for k,v in pairs(_G) do
	print(k,v)
end
--本地变量不存储



特殊用法

print("*******特殊用法********")
print("*******多变量赋值********")
a,b,c=1,2,"123"
print(a)
print(b)
print(c)
--后面的值不够就给nil,多了就省略
a,b,c=1,2
print(a)
print(b)
print(c)



print("*******多返回值********")
function Test( )
	-- body
	return 10,20,30,40
end
--不够就省略,跟上面一样的
a,b,c=Test()
print(a)
print(b)
print(c)



print("*******and or********")
--lua中只有nil和false才为假
--短路:对于and,有假就假,对于or,有真则真,判断第一个是否满足,就停止计算

print(1 and 2)  --2
print(0 and 1)  --1
print(nil and 1)  --1
print(true and 3) --3
print(false and 2) --false

print(true or 2) --true
print(false or 2) --2
print(nil or 2) --2

--lua不支持三目运算符,可以模拟
x=3
y=2
-- ? :
local res = (x>y) and x or b
print(res)

协程


print("*******协程********")

print("*******协程的创建********")
--常用方式
--coroutine.create()
fun=function ( )
	-- body
	print("123")
end

co=coroutine.create(fun)
--协程的本质是一个线程对象
print(co)
print(type(co))


--coroutine.wrap()
--这种方法创建的是函数
co2=coroutine.wrap(fun)
print(co2)
print(type(co2))

print("*******协程的运行********")
--对应create
coroutine.resume(co)
--对应wrap
co2()

print("*******协程的挂起********")
--重要
fun2=function (  )
	-- body
	local i=1
	while true do
		print(i)
		i=i+1
		--协程的挂起函数,下一次继续执行,里面可以写参数,返回值是两个,一个bool代表协程是否启动成功,一个是参数值
		print(coroutine.status(co3))
		print(coroutine.running())
		coroutine.yield(i)
	end
end

co3= coroutine.create(fun2)
isOK,tempI=coroutine.resume(co3) --1
print(isOK,tempI)
isOK,tempI=coroutine.resume(co3) --2
print(isOK,tempI)
isOK,tempI=coroutine.resume(co3) --3
print(isOK,tempI)


--这种方法的话只会返回参数,没有bool
co4=coroutine.wrap(fun2)
co4()
co4()
co4()

print("*******协程的状态********")
--coroutine.status()
--dead
--suspended
--running  要在函数中写

print(coroutine.status(co3)) --有挂起,所以是suspend
print(coroutine.status(co)) --没有挂起,dead

--得到当前正在运行的协程的线程号
print(coroutine.running())

Guess you like

Origin blog.csdn.net/memory_MM_forever/article/details/113867321