我有一些带有以下代码的lua代码:
JSON = loadfile("JSON.lua")()
文件JSON.lua与该行来自的lua代码位于同一目录中。这段代码对我有用了一段时间,然后,在没有我更改lua源,或JSON.lua,或任何文件的权限,或者我运行lua代码的目录的情况下,我开始得到一个该行没有错误。 (我只记得没有可能对lua代码产生任何影响的相关更改。)
添加断言显示错误是由找不到文件引起的。使用文件权限,重新启动我的计算机并没有解决问题,并且撤回我已签入并且工作正常的代码并没有解决错误。
我通过更改上面的行来解决错误,以提供该JSON.lua文件的绝对路径。
有没有什么可以解释为什么没有绝对路径的代码可以工作一段时间然后停止工作?
注意:这种工作和不工作的行为发生在我身上一周两次。我很困惑,虽然我现在已经找到了解决办法,但我对这种间歇性行为的解释非常好奇。
答案 0 :(得分:1)
对此的回答很晚,因为我发现了完全相同的问题。
首先,与上一个答案相反,loadfile
不使用package.path
搜索路径。它只查找指定的目录。如果您没有指定目录,它只会查看“当前目录”。我无法解释为什么它停止为你工作,但可能你的Lua代码以某种方式使用与以前不同的“当前目录”运行。
有两种可能的修复方法:一种是指定loadfile
的绝对路径。
JSON = loadfile("c:\\my_folder\\JSON.lua")()
替代修复取决于您正在使用的特定库,我怀疑它是Jeffrey Friedl's Lua JSON lilbrary。因为这支持较新的Lua模块机制,所以您只需加载require
模块, 支持package.path
搜索路径。
JSON = require("JSON")
答案 1 :(得分:0)
Lua使用package.path
,其默认值来自环境变量LUA_PATH(如果已设置),作为要搜索的目录列表。您可以将此列表前面的.
加载到当前目录中,也可以将文件放在列表中的路径中。