关于 require lua 文件 的一些 疑问

在看一些 游戏代码 包括 quick 的代码的时候

发现其 require 的lua 文件 一般是这样的格式

A.lua

local aa=xxxx

return aa

1 疑问 这里为什么要作为local 使用呢

在查了一些资料了解了一些Lua 的知识后 我的理解是
在使用的时候 比如
function xx()
local a=require"A.lua"
end
由于A.lua 是用的临时 aa 导出的 所以 在xx() 结束的时候 这个模块就释放了

但是 今天测试了一下
A.lua
local aa={}
local num=10
function aa:addNum()
num++
end
function aa:getNum()
return num
end
return aa

B.lua
function xx()
local a1=require(“A”)
printf(a1:getNum()) – 10
a1:addNum()

  local a2=require("A")
  printf(a2:getNUm) --11

end

本来以为会是10 结果a2的结果 是11 那 A.lua 使用临时 导出 的实际意义是什么,这不与全局导出一样了吗

定义为local才不会造成全局变量命名冲突。
模块不存在释放的问题。而局部变量还在使用的时候是不会被回收的,这是闭包的概念。

第一次 require(“A”) 的时候 将模块加载到了
package.loaded"A"]
之后 对 a1 的做 各种操作

然后 a2 require(“A”)

即使 a2 与 a1 不在一个上下文 得到的其实 是已经 经过各种操作之后的模块了

如果我想得到一个新的 A 模块 只能 pakcage.loaded"A"]=nil 再重新require

我这样理解 对吗

是的,第二次require是不会重新加载的,需要如你所说对loaded进行清理

感谢 七月的回答 我自己 再好红理解理解