我是否有办法防止Lua在我要求'a.b'时将其转换为'a/b'?

例如:

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

Lua 引擎将把 'a.b.c/...' 翻译成 'a/b/c/...',以在模式列表中搜索文件,是吗? 如果 'a.b.c' 是实际的文件夹名称,则会出现问题吗?如果有,应该如何解决?

点赞
用户312586
用户312586

据我所知,这种翻译不在规范之内。所以它 可能 能工作,但也可能不工作。它可能在某些平台上出现问题(即在 Linux 和 Mac 上工作,但在 Windows 上不工作)。它可能会在一个版本的 Lua 上工作,但在下一个版本上不工作。因此,我不建议这样做。

确保您保持平台无关的方法是在所有地方使用点号。另外,我建议不要将.lua部分放在末尾,因为 require 也不能始终解析它:

require('a.b.c.foo')
2015-01-28 10:53:26
用户234175
用户234175

如果你的模块位于包含 . 的目录中,使用 require 导入模块会很困难,因为没有方法可以“转义”那个 . ,所以 \ 字符替换不会被执行。

然而,通过调整 package.path,仍然可以间接地让 Lua 查找正确的位置:

local restorepath = package.path
package.path = "./a.b.c/?.lua"
require 'foo'
package.path = restorepath

但我建议你先重新组织项目目录结构,让它更好地与 Lua 的 require 配合使用。否则,你将不得不对可能存在的其他模块执行上述操作。

2015-01-29 00:38:53