Lua 4.0脚本运行失败并抱怨外部作用域。

下面的 Lua 4.0 脚本由于某些变量处于“外部”作用域而失败。我可以用什么不同的方法来修复它?如果可能的话,我想完全避免将东西放在全局作用域中。谢谢。

点赞
用户2733013
用户2733013

这是因为Lua 4.0作用域规则的缘故:

函数作用域有一个特殊限制,即不能访问外部作用域(除了全局作用域)。这适用于任何函数,但在嵌套函数的情况下最为明显,因为您可能想访问包含作用域的本地变量。

在你的代码中,fEcc在函数flokalAdd的作用域中定义,因此无法从内部的norm函数中访问。

您可以使用upvalue来解决此问题:

Upvalue是为解决函数作用域限制而添加的。在外部作用域变量引用前加上%会在函数实例化时产生该变量的副本。仅可通过此方式访问包含该函数的立即作用域和全局作用域。

从代码上看,似乎通过值复制是可以的。这是修复版本。

2013-09-05 11:07:29