解决方法
Lua是一种动态语言,函数只是一种可以使用()运算符调用的值。所以你真的不需要转发声明函数,以确保在调用它时范围内的变量是您认为的变量。
对于包含函数的全局变量,这不是一个问题,因为全局环境是查找变量名的默认位置。然而,对于本地功能,您需要确保本地变量已经在您需要调用其存储的值的词汇点的范围内,并且还要确保在运行时它确实拥有可以调用的值。
例如,这里是一对相互递归的局部函数:
local a,b a = function() return b() end b = function() return a() end
当然,这也是一个使用尾部调用来允许无限次递归的例子,但这里就是声明。通过在存在变量之前使用local声明变量,这些名称在本示例的其余部分的词法范围内被称为局部变量。然后存储两个函数,每个函数指向另一个变量。