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 中点被替换并用作文件夹分隔符。
我正在尝试要求 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 中点被替换并用作文件夹分隔符。