有没有更好的方法来要求来自 lua 中相对路径的文件

Posted

技术标签:

【中文标题】有没有更好的方法来要求来自 lua 中相对路径的文件【英文标题】:Is there a better way to require file from relative path in lua 【发布时间】:2011-08-11 07:11:16 【问题描述】:

我的目录结构如下:

|-- ball.lua
|-- entity.lua
|-- test
    `-- ball_test.lua

我在 test/ball_test.lua 中使用以下代码来要求父目录中的 ball.lua:

package.path = package.path .. ";../entity.lua"
require("entity")
package.path = package.path .. ";../ball.lua"
require("ball")

entity.lua 是 ball.lua 的依赖项。所以我首先需要(“实体”),否则我得到一个模块'entity.lua'未找到错误。这似乎是一个 hack,有什么更好的方法来做到这一点?

【问题讨论】:

有ball模块需要entity.lua,所以你只需要require'ball' @Lukasz - 球确实需要 entity.lua。我收到错误是因为 require 从 test 子目录执行时找不到 entity.lua。抱歉,我的问题没有说清楚。 【参考方案1】:
package.path = package.path .. ";../?.lua"

两者都适用。

【讨论】:

我会将其切换为 package.path = ";../?.lua" .. package.path,这样我就不会有未知模块击败本地模块。 我猜你的意思是package.path = "../?.lua;" .. package.path(应该移动路径分隔符)。否则,好主意。 +1 对于任何寻找如何为 C 扩展模块执行此操作的人,您需要修改 package.cpath 而不是 package.path;否则就差不多了 如果你使用 nginx LUA 模块,这是个坏主意。 package.path 是全局的。每个请求,此代码都会执行并无限连接。最后,它会爆炸。我对这段代码的 PROD 体验很差。请改用 lua_package_path。也阅读这篇文章medium.com/@fabricebaumann/…lua_package_path ";;/your/folder/lua/?.lua" ; ;; 是指向你的默认包 lua 目录的符号链接。不要删除它。

以上是关于有没有更好的方法来要求来自 lua 中相对路径的文件的主要内容,如果未能解决你的问题,请参考以下文章

需要 Lua 相对路径

如何打开相对于执行 Lua 文件的 txt 文件?

Unity中lua 的 io.open() 文件路径的问题

有没有更好的方法来调整gerrit插入代码大小基于规则和排除文件路径?

LuaCheck功能更新——UWA本地资源检测

通过相对路径加载 Lua 文件