Lua require does not work but file is in the trace

我正在尝试在Lua中使用require命令引入文件,在某些情况下,它能正常工作,但是当我要简化LUA PATH中的要求时,文件就找不到了,但它在整个路径中!

为了复制我的require问题,我使用了package.searchpath函数进行测试,该函数使用所需的关键字和Lua路径作为参数。

所以代码如下:

print'MY LUA PATH'local myLuaPath =“?;?。lua; D:\\ Projets \\ wow-addon \\ HeyThere \\?; D:\\ Projets \\ wow-addon \\ HeyThere \\ src \\ HeyThere \\?; D:\\ Projets \\ wow-addon \\ HeyThere \\ test \\ HeyThere \\? “
print(myLuaPath)
print'package search core.add-test'printpackage.searchpath('core.add-test',myLuaPath))
print'package search test.HeyThere.core.add-test'printpackage.searchpath('test.HeyThere.core.add-test',myLuaPath))

结果如下:

MY LUA PATH
?;?。lua; D:\\ Projets \\ wow-addon \\ HeyThere \\?; D:\\ Projets \\ wow-addon \\ HeyThere \\ src \\ HeyThere \\?; D:\\ Projets \\ wow-addon \\ HeyThere \\ test \\ HeyThere \\?
package search core.add-test
nil     no file 'core\add-test'
        no file 'core\add-test.lua'
        no file 'D:\\ Projets \\ wow-addon \\ HeyThere \\ core \\ add-test'
        no file 'D:\\ Projets \\ wow-addon \\ HeyThere \\ src \\ HeyThere \\ core \\ add-test'
        no file 'D:\\ Projets \\ wow-addon \\ HeyThere \\ test \\ HeyThere \\ core \\ add-test'
package search test.HeyThere.core.add-test
test \\ HeyThere \\ core \\ add-test.lua

所以,第一次尝试使用'core.add-test'应该可以使用路径中的“D:\ Projets \ wow-addon \ HeyThere \ test \ HeyThere \?”,但实际上失败了......

在路径中,我想要的文件是存在的!

no file 'D:\ Projets \ wow-addon \ HeyThere \ test \ HeyThere \ core \ add-test'

但是,使用相同的LUA PATH,但从父文件夹开始,文件被找到了......第二次使用'test.HeyThere.core.add-test'从'D:\ Projets \ wow-addon \ HeyThere \?'发现

-> test \ HeyThere \ core \ add-test.lua

有人能解释一下为什么第一次不起作用吗?

EDIT :)

我的当前目录是D:\ Projets \ wow-addon \ HeyThere

我的lua.exe在D:\ Projets \ wow-addon \ HeyThere \ bin \ lua中,但添加到了我的PATH变量中(我在Windows上)

我设置了LUA_PATH环境变量并执行

lua "test\ test-suite.lua "-v

test-suite.lua中的代码是上面描述的测试代码

点赞
用户14814842
用户14814842

正如 @EgorSkriptunoff 建议的那样,将文件扩展名添加到路径中可以解决这个问题...

例如:

  • 错误路径 D:\Projets\wow-addon\HeyThere\?
  • 正确路径 D:\Projets\wow-addon\HeyThere\?.lua

路径变量中应该包含扩展名,因为在 require 中,点被替换并用作文件夹分隔符。

2020-12-17 21:21:47