我有一个文件main.lua
:
require("hello")
和目录hello.lua
中的文件foo bar! baz
(包含!
):
module(...,package.seeall)
print("hello from hello.lua")
当我(在Windows上)将环境变量LUA_PATH
设置到目录:
set LUA_PATH="C:\Programme\Lua\5.1\foo bar! baz\?.lua"
我收到一个奇怪的错误:
C:\Programme\Lua\5.1>lua main.lua
lua: main.lua:4: module 'hello' not found:
no field package.preload['hello']
no file '"C:\Programme\Lua\5.1\foo barC:\Programme\Lua\5.1 baz\hello.lua
"'
no file '.\hello.dll'
no file '.\hello51.dll'
no file 'C:\Programme\Lua\5.1\hello.dll'
no file 'C:\Programme\Lua\5.1\hello51.dll'
no file 'C:\Programme\Lua\5.1\clibs\hello.dll'
no file 'C:\Programme\Lua\5.1\clibs\hello51.dll'
no file 'C:\Programme\Lua\5.1\loadall.dll'
no file 'C:\Programme\Lua\5.1\clibs\loadall.dll'
stack traceback:
[C]: in function 'require'
main.lua:4: in main chunk
[C]: ?
看到非常奇怪的路径C:\Programme\Lua\5.1\foo barC:\Programme\Lua\5.1 baz\hello.lua
?感叹号(爆炸声)有什么特别之处?如何在Windows中正确使用?在Mac上,这似乎工作正常。
答案 0 :(得分:4)
“这种替换只在Lua第一次设置路径时才会发生 (来自
LUA_PATH
或来自luaconf的默认值)。如果你 通过其他方式设置路径,可以避免这个问题。“
更多信息和潜在替代方案:http://lua-users.org/lists/lua-l/2012-08/msg00052.html
答案 1 :(得分:0)
解释是正确的(它是在Windows上记录的行为),但我也可以提供一个可能的解决方案(或者更确切地说是一种解决方法):因为只会替换第一个感叹号,而不是使用set LUA_PATH="C:\Programme\Lua\5.1\foo bar! baz\?.lua"
,使用:
set LUA_PATH="!\foo bar! baz\?.lua"