require() 不会重复加载。
- --require 函数的实现
- function require(name)
- if not package.loaded[name] then
- local loader = findloader(name) //这一步演示在代码中以抽象函数findloader来表示
- if loader == nil then
- error("unable to load module" .. name)
- end
- package.loaded[name] = true
- local res = loader(name)
- if res ~= nil then
- package.loaded[name] = res
- end
- end
- return package.loaded[name]
- end
import()
同require功能,加载包更方便,可以用相对路径
module()的功能如下,默认不能方位上一级环境变量(_G),module(..., package.seeall)即可
local moduleName = ...
local M = {} -- 局部的变量
_G[moduleName] = M -- 将这个局部变量最终赋值给模块名
package.loaded[moduleName] = M
local _G = _G -- 保存了全局的环境变量
setfenv(1, M)