小编Kwo*_*unn的帖子

为什么 lua 不允许本地 lambda 函数递归调用自己?

我正在尝试在 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”,所以在我看来这些应该是相等的。

我缺少什么?

recursion lua functional-programming

2
推荐指数
1
解决办法
272
查看次数

标签 统计

functional-programming ×1

lua ×1

recursion ×1