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ますか?感嘆符(バング)の何が特別なのですか?Windowsでそれを正しく行う方法は?Macでは、これは正常に機能しているようです。

4

2 に答える 2

4

「この置換は、Luaがパスを初めて設定するときにのみ発生します(LUA_PATHluaconfから、またはデフォルトからのいずれか)。他の方法でパスを設定すると、問題を回避できます。」

詳細と代替案:http://lua-users.org/lists/lua-l/2012-08/msg00052.html

于 2012-10-15T18:44:04.233 に答える
0

説明は正しいですが(Windowsでの動作が文書化されています)、可能な解決策(または回避策)を提供することもできます。最初の感嘆符のみが置き換えられるため、使用する代わりに、次をset LUA_PATH="C:\Programme\Lua\5.1\foo bar! baz\?.lua"使用します。

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