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

Set*_*eno 47 lua

我的目录结构如下所示:

|-- ball.lua
|-- entity.lua
|-- test
    `-- ball_test.lua
Run Code Online (Sandbox Code Playgroud)

我在test/ball_test.lua中使用以下代码来从父目录中获取ball.lua:

package.path = package.path .. ";../entity.lua"
require("entity")
package.path = package.path .. ";../ball.lua"
require("ball")
Run Code Online (Sandbox Code Playgroud)

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

Dou*_*rie 71

package.path = package.path .. ";../?.lua"
Run Code Online (Sandbox Code Playgroud)

对两者都有用.

  • 我猜你的意思是``package.path ="../?.lua;" .. package.path``(应该移动路径分隔符).否则,好主意. (21认同)
  • 我会把它切换到`package.path ="; ../?.lua".. package.path`所以我没有未知的模块击败本地的模块. (10认同)
  • 对于那些寻找如何为C扩展模块执行此操作的人来说,你需要修改`package.cpath`而不是`package.path`; 否则它是一样的 (6认同)
  • 如果你使用 NGINX LUA 模块,这是个坏主意。package.path 是全局的。每个请求,都会执行此代码并无限连接。最后,它会爆炸。我在 PROD 中使用这段代码的经历很糟糕。请使用 lua_package_path 代替。另请阅读这篇文章 https://medium.com/@fabricebaumann/how-we-reduced-the-cpu-usage-of-our-lua-code-cc30d001a328 lua_package_path ";;/your/folder/lua/?.lua ”; _;;_ 是指向默认包 lua 目录的符号链接。不要将其移除。 (3认同)