3

我有一个文件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吗?感叹号(bang)有什么特别之处?如何在 Windows 中做到这一点?在 Mac 上,这似乎工作正常。

4

2 回答 2

4

“这种替换仅在 Lua 第一次设置路径时发生(来自LUA_PATH或来自 luaconf 的默认路径)。如果您通过其他方式设置路径,则可以避免该问题。”

更多信息和潜在替代方案:http: //lua-users.org/lists/lua-l/2012-08/msg00052.html

于 2012-10-15T18:44:04.233 回答
0

The explanation is correct (it's documented behavior on Windows), but I can also offer a possible solution (or rather a workaround): since only the first exclamation mark is going to be replaced, instead of using set LUA_PATH="C:\Programme\Lua\5.1\foo bar! baz\?.lua", use:

set LUA_PATH="!\foo bar! baz\?.lua"
于 2014-10-19T05:44:35.913 回答