4

通常,当我对与远程软件相关的问题有疑问时,我发现其他人已经问过同样的问题,并且得到了对我也有用的好答案。

不过,这一次,我没能找到解决我困境的办法。

我们开始吧:我目前正在尝试将我的 Lua 编程提升一个或三个级别,并希望使用模块。所以,我有一个这样的结构:

main.lua
foo/bar.lua

现在,在 main.lua 我做

require("foo.bar")

失败了,

main.lua:1 module 'foo.bar' not found:
     no field package.preload['foo.bar']
     no file 'foo.bar.lua'
     no file 'foo.bar.lua'
     no file 'foo.lua'

好的,我的可能有问题,package.path所以我 package.searchpath("foo.bar", package.path)用来看看我做错了什么。

问题是package.searchpath解决foo.bar哪个foo/bar.lua是完全正确的。

据我了解,package.searchpath 尝试以与 require 相同的方式查找模块,但在我的情况下似乎存在一些故障。

让我感到奇怪的是no file 'foo.bar.lua'错误输出中的重复

我误解了require的使用吗?

我正在使用 LuaJIT-2.0.0 运行我的块


更新:

我正在使用 LuaJIT-2.0.0 运行我的块 <- 这是我的问题的原因,库存 Lua-5.2.2 的行为符合预期

4

1 回答 1

1
package.path = debug.getinfo(1,"S").source:match[[^@?(.*[\/])[^\/]-$]] .."?.lua;".. package.path
require("foo.bar")

当被要求加载其他文件时,此行会导致require在与当前文件相同的目录中查找。如果您希望它改为搜索相对于当前目录的目录,请在 " 和 ?.lua 之间插入相对路径

这是需求描述的一部分:

[...] 否则需要使用存储在 package.path. 如果这也失败了,它会使用存储在 package.cpath 中的路径来搜索 C 加载器。如果这也失败了,它会尝试一个多合一的加载程序(请参阅 参考资料package.loaders)。

package.path 的默认路径始终是执行指定脚本的 .exe。

于 2013-08-08T16:54:22.113 回答