为什么LUA_PATH在Windows上包含一个bang(!)?

时间:2012-10-15 18:33:33

标签: windows lua

我有一个文件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上,这似乎工作正常。

2 个答案:

答案 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"