当我需要 'a.b' 时,有什么方法可以阻止 lua 将 'a.b' 翻译成 'a/b'?

Is there any way that prevent lua from translating 'a.b' to 'a/b' when I require 'a.b'?

例如:

require('a.b.c/foo.lua')

Lua引擎会将'a.b.c/...'翻译成'a/b/c/...'来搜索模式列表中的文件,对吧? 'a.b.c' 是真正的文件夹名会不会有问题?如果是,如何解决?

据我所知,规范中没有这样的翻译。所以它可能有效,但也可能无效。它可能会在某些平台上崩溃(即在 Linux 和 Mac 上工作,而不是在 Windows 上工作)。它可能在 Lua 的一个版本中有效,但在下一个版本中无效。所以不推荐。

确保您保持与平台无关的方法是在任何地方都使用点。此外,我建议不要将 .lua 部分放在最后,require 也并不总是能很好地解决问题:

require('a.b.c.foo')

如果您的模块所在的目录中包含 . 作为其名称的一部分,那么使用 require 将很难将其拉入,因为无法 'escape' . 所以 \ 替换没有完成。

但是,仍然可以通过 package.path:

间接指向 lua 以查找正确的位置
local restorepath = package.path
package.path = "./a.b.c/?.lua"
require 'foo'
package.path = restorepath

但我建议您首先尝试重组您的项目目录结构,以便它更好地与 lua 的 require 一起使用。否则你将不得不继续用你可能拥有的其他模块进行上述舞蹈。