需要 Lua 相对路径

Lan*_*nce 5 lua require

我正在编写一个 Lua 脚本,并尝试对与主脚本位于同一目录中的文件使用 require 。我似乎无法在这种情况下工作,并尝试了几种我找到的解决方案,但似乎都不起作用。我将以下文件放在一个目录中:

main.lua
helper.lua
Run Code Online (Sandbox Code Playgroud)

我已尝试以下解决方案并收到以下错误:

解决方案一:

local folderOfThisFile = (...):match("(.-)[^%.]+$") 
local helper = require(folderOfThisFile .. 'helper')

lua: ...domizerWPF\DataFiles\LUA\main.lua:2: attempt to index local 'pathOfThisFile' (a nil value)
stack traceback:
    ...domizerWPF\DataFiles\LUA\main.lua:2: in main chunk
    [C]: ?
Run Code Online (Sandbox Code Playgroud)

解决方案2:

package.path = "/?.lua;" .. package.path 
local helper = require('helper')

lua: ...domizerWPF\DataFiles\LUA\main.lua:2: module 'helper' not found:
    no field package.preload['helper']
    no file '/helper.lua'
    no file '.\helper.lua'
    no file 'C:\Program Files (x86)\Lua\5.1\lua\helper.lua'
    no file 'C:\Program Files (x86)\Lua\5.1\lua\helper\init.lua'
    no file 'C:\Program Files (x86)\Lua\5.1\helper.lua'
    no file 'C:\Program Files (x86)\Lua\5.1\helper\init.lua'
    no file 'C:\Program Files (x86)\Lua\5.1\lua\helper.luac'
    no file '.\helper.dll'
    no file '.\helper51.dll'
    no file 'C:\Program Files (x86)\Lua\5.1\helper.dll'
    no file 'C:\Program Files (x86)\Lua\5.1\helper51.dll'
    no file 'C:\Program Files (x86)\Lua\5.1\clibs\helper.dll'
    no file 'C:\Program Files (x86)\Lua\5.1\clibs\helper51.dll'
    no file 'C:\Program Files (x86)\Lua\5.1\loadall.dll'
    no file 'C:\Program Files (x86)\Lua\5.1\clibs\loadall.dll'
stack traceback:
    [C]: in function 'require'
    ...domizerWPF\DataFiles\LUA\main.lua:2: in main chunk
    [C]: ?
Run Code Online (Sandbox Code Playgroud)

我尝试过解决方案 2 的变体,其中包含各种路径,例如“?.lua;” 和“./?.lua;” 无济于事。

hug*_*omg 2

错误消息的这两行揭示了您的问题:

no file '/helper.lua'
no file '.\helper.lua'
Run Code Online (Sandbox Code Playgroud)

第一行是由于您对 package.path 的更改所致。正如您所看到的,它会查找不存在的“/helper.lua”文件,因此它不会执行任何操作。第二行是由于默认的 package.path 导致的,并且正在当前工作目录中查找“helper.lua”。由于找不到,您当前的工作目录一定不是 main.lua 所在的目录。

修复方法是使当前工作目录成为 main.lua 和 helper.lua 所在的目录,或者添加"C:\\path\\to\\your\\lua\\project\\?.lua"到 package.path