2

我有一些带有以下行的lua代码:

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

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

添加断言表明错误是由未找到文件引起的。使用文件权限,重新启动我的机器并没有解决问题,并且撤回我已经签入并且运行良好的代码并没有解决错误。

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

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

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

4

2 回答 2

2

Lua 使用package.path,其默认值来自环境变量 LUA_PATH (如果已设置),作为要搜索的目录列表。你可以把.这个列表放在前面来从当前目录加载文件,或者你可以把你的文件放在一个路径列表中。

于 2012-12-26T00:13:45.410 回答
1

一个迟到的答案,因为我发现了完全相同的问题。

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

有两种可能的解决方法:一种是指定loadfile.

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

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

JSON = require("JSON")
于 2015-10-19T18:33:38.390 回答