Lua 要求不起作用,但文件在跟踪中

Lua require does not work but file is in the trace

我正在尝试要求 Lua 中的文件,在一种情况下它正在工作,但是当我想简化更新 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')
print(package.searchpath('core.add-test', myLuaPath))
print('package search test.HeyThere.core.add-test')
print(package.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\?' 值但失败了...

trace中有我要的文件!

没有文件'D:\Projets\wow-addon\HeyThere\test\HeyThere\core\add-test'

但使用相同的 LUA 路径,但从父文件夹开始找到文件...第二次测试 'test.HeyThere.core.add-test' 从 'D:\Projets\wow-addon\HeyThere\?'

中找到

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

谁能给我解释一下为什么第一次不行?

编辑:

我当前目录是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里面的代码就是上面描述的测试代码

正如@EgorSkriptunoff 所建议的那样,在路径中添加文件扩展可以解决问题...

例如:

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

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