第 xxx 行的函数具有超过 60 个 upvalue。

我写了一些像这样的 lua 代码:

(代码块)

当运行此代码时,我得到了以下错误:

    78: function at line 71 has more than 60 upvalues

我知道这种代码很丑陋,我可以使用其他方式来做(例如表格),但这种代码可能由我的用户编写。

有人能为我解释一下这个问题,并告诉我如何避免这个问题吗?非常感谢。

点赞
用户734069
用户734069

告诉我如何避免这个问题?

有个老笑话,一个人走进医生办公室,说:“我这样抬手会很疼。”医生说:“那就不要这样抬手。”

如果你的用户编写的 Lua 代码无法编译,这是你无法修复的问题。这种编译错误与以下类似的错误一样合法:

if condition  --忘记写 then
  return something
end

所以,如果你的代码将接受任意的 Lua 脚本进行编译和执行,那么它需要能够处理编译失败的 Lua 脚本,因为_任何原因_都有可能导致编译失败。

如果编译失败,请向用户报告错误并尽力恢复。

2012-08-20 21:06:39
用户936986
用户936986

最多只能有60个upvalues,也就是来自外部作用域的值,这是Lua内部的一个限制。当然,你可以通过重新编译Lua来改变这个限制,但我建议不要这样做。相反,应该将值打包到某个表中,其布局由代码逻辑决定。在你的特定示例中,你真的应该使用:

local a = {}
a[1] = 1
a[2] = 2
a[3] = 3
a[4] = 3
a[5] = 3
-- etc...
2012-08-20 21:53:19