3.多脚本执行

Require和Package.loaded[]、_G

  1. 默认一个脚本只能执行一次
  2. 如需多次执行需要将package.loaded["TestRequire"] = nil,之后再次执行
  3. _G表存储所有的全局变量(包含外部脚本的全局变量)
  4. 使用local声明局部变量
  5. 外部脚本可以将局部变量返回,调用者接收即可

image

print("**********多脚本执行************")
print("**********全局变量和本地变量************")
--全局变量
a = 1
b = "123"
for i = 1,2 do
    c = "Cold"
end
print(c)
--本地(局部)变量的关键字 local
for i = 1,2 do
    local d = "Cold"
    print("循环中的d"..d)
end
print(d)
fun = function()
    local tt = "123123123"
end
fun()
print(tt)
local tt2 = "555"
print(tt2)

print("**********多脚本执行************")
--关键字 require("脚本名") require('脚本名')
require('TestRequire')
print(testA)
print(testLocalA)

print("**********脚本卸载************")
--如果是require加载执行的脚本 加载一次过后不会再被执行
require("TestRequire")
--package.loaded["脚本名"]
--返回值是boolean 意思是 该脚本是否被执行
print(package.loaded["TestRequire"])
--卸载已经执行过的脚本
package.loaded["TestRequire"] = nil
print(package.loaded["TestRequire"])

--require 执行一个脚本时  可以再脚本最后返回一个外部希望获取的内容
local testLA = require("TestRequire")
print(testLA)

print("**********大G表************")
--_G表是一个总表(table) 他将我们申明的所有全局的变量都存储在其中
for k,v in pairs(_G) do
    print(k,v)
end
--本地变量 加了local的变量时不会存到大_G表中

TestRequire.lua

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

输出:

**********多脚本执行************
**********全局变量和本地变量************
Cold
循环中的dCold
循环中的dCold
nil
nil
555
**********多脚本执行************
Test测试
456
123
nil
**********脚本卸载************
456
nil
Test测试
456
456
**********大G表************
a    1
string    table: 00C6A5D8
xpcall    function: 00C67FA8
b    123
package    table: 00C62668
tostring    function: 00C68188
print    function: 00C68448
os    table: 00C6A5B0
unpack    function: 00C68088
require    function: 00C68E00
getfenv    function: 00C68508
setmetatable    function: 00C68128
next    function: 00C68548
assert    function: 00C61C98
tonumber    function: 00C67FE8
io    table: 00C6A588
rawequal    function: 00C68468
testA    123
collectgarbage    function: 00C68388
arg    table: 00C6A470
getmetatable    function: 00C683A8
module    function: 00C68F40
fun    function: 00C6CEA0
rawset    function: 00C68648
c    Cold
math    table: 00C6A1C8
debug    table: 00C6A240
pcall    function: 00C684A8
table    table: 00C62690
newproxy    function: 00C60550
type    function: 00C68028
coroutine    table: 00C62618
_G    table: 00C64F70
select    function: 00C68368
gcinfo    function: 00C68408
pairs    function: 00C60520
rawget    function: 00C685C8
loadstring    function: 00C68488
ipairs    function: 00C64F98
_VERSION    Lua 5.1
dofile    function: 00C684C8
setfenv    function: 00C68348
load    function: 00C683C8
error    function: 00C685E8
loadfile    function: 00C68568

Lua多脚本执行与变量作用域摘要:

  1. 脚本默认只执行一次,需手动卸载(package.loaded["脚本名"]=nil)才能重新执行
  2. _G表存储所有全局变量(包括外部脚本的),但local局部变量不存入_G表
  3. 外部脚本可通过return返回局部变量供调用者使用
  4. 全局变量在整个环境中可见,而local变量只在定义的作用域内有效
  5. require加载脚本时会执行并缓存,通过package.loaded可查询/控制脚本状态
最后修改:2025 年 06 月 04 日
如果觉得我的文章对你有用,请随意赞赏