我有以下代码段
function initializeWorld()
_G.require = function(name)
if package.loaded[name] == nil then
local result, err = external.MyAPIEndpoint:LUAInclude(name .. '.lua')
if err == nil then
if result ~= nil then
package.loaded[name] = result
else
package.loaded[name] = true
end
return package.loaded[name]
else
local errTxt = err .. "\r\n" .. debug.traceback()
error(errTxt, 1)
end
else
return package.loaded[name]
end
end
helloWorld = require ("helloWorld")
print(helloWorld.welcome())
end
function initializeUniverse()
_G.require = function(name)
if package.loaded[name] == nil then
local result, err = external.MyAPIEndpoint:LUAInclude(name .. '.lua')
if err == nil then
if result ~= nil then
package.loaded[name] = result
else
package.loaded[name] = true
end
return package.loaded[name]
else
local errTxt = err .. "\r\n" .. debug.traceback()
error(errTxt, 1)
end
else
return package.loaded[name]
end
end
helloUniverse = require ("helloUniverse")
print(helloUniverse.welcome())
end
正如您所看到的,global requires
用于两个不同的地方。一次在initializeWorld
,另一次在initializeUniverse
我可以对代码进行修改,使其仅加载一次吗?
由于
答案 0 :(得分:1)
您可能不应该覆盖全局require
功能。如果您想运行第三方或用户代码,您可以将其沙箱化,否则您只需使用其他名称,例如my_require()
或load_awesome_stuff()
我会假设您不知道首先调用两个函数initializeWorld()
和initializeUniverse()
中的哪一个,尽管此解决方案可以正常工作。
只需在某个名称下定义函数,无论您最喜欢哪个,但如果可能,请避免全局require
,在某些时候您可以确定它在这两个初始化函数之前运行。然后你可以在它们中使用它。如果您希望将其称为require
,则可以在函数体中本地定义local require = my_require; require "some_stuff"