UH2S1L9——多Lua脚本执行
本章代码关键字
1 2 3 4 5
| local return require() package.loaded[] _G
|
全局变量和本地变量
全局变量
Lua默认声明出来的变量是全局变量,这是一种声明出来后就可以在脚本里到处调用的变量,
即使它是在循环体或者函数体内声明的变量,出了循环或者函数仍然可以使用,不会释放内存
显然到处使用全局变量是很浪费内存的
1 2 3 4 5 6 7 8 9 10 11
| for i = 1, 2 do c = "唐老狮" end print(c)
function Fun() tt = "123123123" end print(tt) Fun() print(tt)
|
本地变量
在变量声明前,加上local
,就是本地(局部)变量,这种变量在出了循环体或者函数体后就会被释放内存
即使在函数体或者函数外声明了本地变量,它依然会在接下来的多脚本执行里起作用,这样的本地变量,外部脚本不能调用它们(除非你将它return
出去)
1 2 3 4 5 6 7 8 9 10 11 12
| for i = 1, 2 do local d = "唐老狮" print(d) end print(d)
function Fun() local tt = "123123123" end
Fun() print(tt)
|
多脚本执行
require
,参数为要加载的脚本名(需要脚本在同一目录下,或者传入路径),执行后会自动执行该脚本内的内容
加载外部脚本后,外部脚本的全局变量在本脚本内依然可以使用,而本地变量不行
如果重复加载一个脚本,该脚本在加载一次过后就不会再被执行,除非重复加载前卸载脚本
Lesson11_Test.lua
1 2 3
| print("Test测试") TestA = "123" local testLocalA = "456"
|
Lesson11_require.lua
1 2 3 4
| print("**********多脚本执行************") require("Lesson11_Test") print(TestA) print(testLocalA)
|
1 2 3 4
| **********多脚本执行************ Test测试 123 nil
|
若想要外部脚本使用本脚本的局部变量,可以直接return
该局部变量,脚本return
不能再执行任何脚本
require
函数加载执行脚本时,还会返回出加载脚本的返回值(即使是本地变量亦可返回),可以用一个变量接收它,
Lesson11_Test.lua
1 2 3 4 5
| print("Test测试") TestA = "123" local testLocalA = "456"
return testLocalA
|
Lesson11_require.lua
1 2
| local testLA = require("Lesson11_Test") print(testLA)
|
脚本卸载
已知重复加载一个脚本,该脚本在加载一次过后就不会再被执行,可以通过package.loaded["脚本名"]
来获取一个脚本是否被加载
1 2
| require("Lesson11_Test") print(package.loaded["Lesson11_Test"])
|
卸载脚本只需要执行package.loaded["脚本名"] = nil
即可
1 2 3 4 5
| print("**********脚本卸载************") require("Lesson11_Test") print(package.loaded["Lesson11_Test"]) package.loaded["Lesson11_Test"] = nil require("Lesson11_Test")
|
1 2 3 4
| **********脚本卸载************ Test测试 true Test测试
|
_G表
_G
表是一个总表,他将我们申明的所有全局变量都存储在其中(局部变量则不会存储到_G
内)
1 2 3 4 5 6
| print("**********大G表************") a = 1 local b = 2 for key, value in pairs(_G) do print(key, value) end
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| **********大G表************ a 1 string table: 00579890 xpcall function: 005776E8 package table: 00577950 tostring function: 005773E8 print function: 00577008 os table: 00579AC0 unpack function: 005773A8 require function: 00578308 getfenv function: 005771C8 setmetatable function: 00577348 next function: 00577188 assert function: 00577128 tonumber function: 005776C8 io table: 00579908 rawequal function: 00577068 collectgarbage function: 005772C8 arg table: 00579A98 getmetatable function: 00577288 module function: 005781C8 rawset function: 005770E8 math table: 00579778 debug table: 00579B60 pcall function: 005772A8 table table: 00577978 newproxy function: 00570578 type function: 00577568 coroutine table: 005777E8 _G table: 00573F08 select function: 005771A8 gcinfo function: 005771E8 pairs function: 00570548 rawget function: 00577228 loadstring function: 00577208 ipairs function: 00573F30 _VERSION Lua 5.1 dofile function: 005772E8 setfenv function: 005770A8 load function: 005770C8 error function: 00576FE8 loadfile function: 00577308
|