当我需要 '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
一起使用。否则你将不得不继续用你可能拥有的其他模块进行上述舞蹈。
例如:
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
:
local restorepath = package.path
package.path = "./a.b.c/?.lua"
require 'foo'
package.path = restorepath
但我建议您首先尝试重组您的项目目录结构,以便它更好地与 lua 的 require
一起使用。否则你将不得不继续用你可能拥有的其他模块进行上述舞蹈。