Lua 加载文件找不到文件



我有一些lua代码,下面有一行:

JSON = loadfile("JSON.lua")()

文件 JSON.lua 与该行来自的 lua 代码位于同一目录中。 这段代码对我有用了一段时间,然后,在没有我更改 lua 源、JSON.lua、或任何文件的权限或我运行 lua 代码的目录的情况下,我开始在该行收到 nil 错误。 (我只是记得没有可能对lua代码产生任何影响的相关更改。

添加断言显示错误是由找不到文件引起的。 使用文件权限,重新启动我的机器并不能解决问题,并且拉回我已签入并正常工作的代码并不能解决错误。

我通过更改上面的行以提供该 JSON .lua 文件的绝对路径来解决错误。

有什么可以解释为什么没有绝对路径的代码可以工作一段时间然后停止工作吗?

注意:这种工作然后不工作的行为在一周内发生在我身上两次。 我很困惑,虽然我现在已经找到了解决方法,但我真的很好奇这种间歇性行为的解释。

Lua 使用 package.path ,其默认值来自环境变量 LUA_PATH 如果已设置,则作为要搜索的目录列表。您可以将此列表的.放在前面以从当前目录加载文件,也可以将文件放在列表中的路径中。

关于这个问题的较晚答案,因为我发现了完全相同的问题。

首先,与前面的答案相反,loadfile不使用package.path搜索路径。它只在指定的目录中查找。如果您不指定目录,它只会在"当前目录"中查找。我无法确切解释为什么它不再为您工作,但可能您的 Lua 代码以某种方式使用与以前的不同的"当前目录"运行。

有两种可能的修复方法:一种是指定loadfile的绝对路径。

JSON = loadfile("c:\my_folder\JSON.lua")()

替代修复取决于您使用的特定库,我怀疑是Jeffrey Friedl的Lua JSON lilbrary。因为这支持较新的 Lua 模块机制,所以你可以只加载带有 require 的模块,它确实支持 package.path 搜索路径。

JSON = require("JSON")

最新更新