设置全局 require
2016-8-26 23:22:5
收藏:0
阅读:81
评论:1
以下是我的代码示例
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
如您所见,全局 require 在两个不同的地方都被使用。一次在 initializeWorld,另一次在 initializeUniverse
我能否修改代码,使其只加载一次?
谢谢
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

你可能不应该覆盖全局的
require函数。如果你想要运行第三方或用户代码,你可以将其放入沙盒中,否则你可以使用其他名称,例如my_require()或load_awesome_stuff()。我假设你不知道
initializeWorld()和initializeUniverse()中的哪一个函数被最先调用,但无论哪种情况,以下解决方案都适用。只需将函数定义为某个名称(任何你最喜欢的名称即可),但如果可能的话应避免使用全局的
require,在某个确保在这两个初始化函数之前运行它的时刻。然后你可以在这两个函数中使用它。如果你想让它叫做require,你可以在函数体中本地定义它,例如local require = my_require; require "some_stuff"。