设置全局要求
Set a global require
我有以下代码片段
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
我可以修改代码使其只加载一次吗?
谢谢
您可能不应该覆盖全局 require
函数。如果你想 运行 第三方或用户代码,你可以将它沙盒化,否则你可以简单地使用不同的名称,如 my_require()
或 load_awesome_stuff()
我假设您不知道 initializeWorld()
和 initializeUniverse()
这两个函数中的哪一个首先被调用,尽管这个解决方案无论哪种方式都有效。
简单地用你最喜欢的名字定义函数,但如果可能的话避免全局 require
,在某些时候你可以确定它 运行s 在其中任何一个之前两个初始化函数。然后你就可以在他们两个中使用它。如果你想让它被称为 require
,你可以在函数体中本地定义它,比如 local require = my_require; require "some_stuff"
我有以下代码片段
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
我可以修改代码使其只加载一次吗?
谢谢
您可能不应该覆盖全局 require
函数。如果你想 运行 第三方或用户代码,你可以将它沙盒化,否则你可以简单地使用不同的名称,如 my_require()
或 load_awesome_stuff()
我假设您不知道 initializeWorld()
和 initializeUniverse()
这两个函数中的哪一个首先被调用,尽管这个解决方案无论哪种方式都有效。
简单地用你最喜欢的名字定义函数,但如果可能的话避免全局 require
,在某些时候你可以确定它 运行s 在其中任何一个之前两个初始化函数。然后你就可以在他们两个中使用它。如果你想让它被称为 require
,你可以在函数体中本地定义它,比如 local require = my_require; require "some_stuff"