Kwo*_*unn 2 recursion lua functional-programming
我正在尝试在 Lua 中实现一种装饰器模式,在此过程中我遇到了有关 lambda 函数调用自身的问题。
下面的代码运行良好:
local function foo()
print("bar")
foo()
end
foo()
Run Code Online (Sandbox Code Playgroud)
但以下行为是不允许的:
local foo = function ()
print("bar")
foo()
end
foo()
Run Code Online (Sandbox Code Playgroud)
解释器抛出以下错误:
Exception has occurred: main.lua:27: attempt to call a nil value (global 'foo')
stack traceback:
main.lua:27: in local 'foo'
main.lua:30: in main chunk
[C]: in ?
Run Code Online (Sandbox Code Playgroud)
lua 文档指出“在 Lua 中编写函数的常用方法,就像function foo (x) return 2*x end我们所说的语法糖的一个实例;换句话说,这只是一种漂亮的编写方式foo = function (x) return 2*x end”,所以在我看来这些应该是相等的。
我缺少什么?
换句话说,这只是一种漂亮的写作方式
foo = function (x) return 2*x end
是的,就是这样function。local function工作原理略有不同。
问题是编译器不知道foo函数中的named是局部变量,因为局部变量的完整声明foo还没有完成。而且这只发生在整个语句的末尾local function;在此之前,foo将引用全局变量。
为了防止这种情况,local function X <stuff>有两个语句的语法糖:local X; X = function <stuff>。如果您愿意,您可以执行相同的操作,但局部变量的声明必须是与函数表达式本身分开的语句。