通常当我对远程软件相关的问题有疑问时,我发现其他人已经问过同样的问题,并得到了对我有用的好答案。
但这一次,我未能找到解决困境的答案。
我们走了: 我正在尝试将我的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表现得如预期
答案 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。