Lua相对路径需要。
2014-12-25 9:27:9
收藏:0
阅读:116
评论:3
我正在编写一个 Lua 脚本,尝试在与主脚本相同的目录中使用 require 引用一个文件。在这种情况下,我似乎无法让 require 正常工作,尝试过多种解决方法都无效。我在一个目录中有以下文件:
main.lua
helper.lua
我已经尝试了以下解决方案,并得到了以下错误:
解决方案1:
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]: ?
解决方案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]: ?
我尝试过多种 Solution 2 变体与各种路径,如 "?.lua;" 和 "./?.lua;",但都没有效果。
点赞
用户7480063
我仍在学习lua,但是这是我可以为您准备的,
如果您没有安装文件系统API,则可以使用当前工作目录创建一个字符串变量,并像这样添加:
local cwd="C:\users\user\Desktop\"
dofile(cwd.."program.lua")
这就是我做的,我没有遇到任何问题。
2017-03-06 18:14:40
用户2428487
如果您的意思是想从任何目录调用程序并且正确定位require的文件,那么您可以使用以下解决方案(只需要在 main.lua 中使用):
local base_path = string.match(arg[0], '^(.-)[^/\\]*$')
package.path = string.format("%s;%s?.lua", package.path, base_path)
这个解决方案是通过将文件所在的目录添加到包路径中,让require能够处理该目录中的文件。Lua目前还没有自动实现这个功能(Python从2.6版开始就实现了这个功能); 希望它在将来能够实现。您还可以使用base_path在同一目录中引用其他文件。例如,我这里有一个SQLite数据库文件,程序需要打开它,所以我使用以下代码:
local database_filename = base_path .. 'db.sqlite'
您还可以将base_path设为全局变量,以便在必要时其他模块也可以使用它。
2017-11-27 14:52:16
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
这两行错误信息可以让您更好地了解您的问题:
no file '/helper.lua' no file '.\helper.lua'第一行是由于您对 package.path 进行的更改。正如您所看到的,它正在寻找一个不存在的 "/helper.lua" 文件,因此它没有任何作用。第二行是由于默认的 package.path,并且正在当前工作目录中寻找 "helper.lua"。由于找不到,您的当前工作目录必须不是 main.lua 所在的目录。
解决方法是将当前工作目录设置为 main.lua 和 helper.lua 所在的目录,或将 "C:\path\to\your\lua\project\?.lua" 添加到 package.path。