Lua:require找不到子模块,但是searchpath成功了吗?

时间:2013-08-08 12:15:13

标签: lua require

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

但这一次,我未能找到解决困境的答案。

我们走了: 我正在尝试将我的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.searchpathfoo.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表现得如预期

1 个答案:

答案 0 :(得分:1)

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

此行会导致require查看与目录相同的目录   当前文件被要求加载其他文件时。如果你想要它   搜索相对于当前目录的目录,插入   “和?.lua

之间的相对路径

以下是需求说明的一部分:

  

[...]否则需要使用存储的路径搜索Lua加载程序   package.path。如果这也失败了,它会使用。搜索C loader   存储在package.cpath中的路径。如果这也失败了,它会尝试一个   一体化装载机(见package.loaders)。

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