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
   |