在javascript中,可以通过同时定义和调用函数来快速创建闭包,如下所示:

function() {
    local something = 1;
    return function () {
        // something
    }
}()


是否可以在lua中执行相同的操作?

最佳答案

是的,您可以在Lua中创建立即调用的函数表达式(IIFE)。 Lua要求在函数表达式:(function () return 10 end)()上加上括号。删除括号function () return 10 end(),您会收到语法错误。命名功能是不可能的:(function f() return 10 end)()。命名函数语法是用于将函数分配给变量f = function() return 10 end的语法糖,并且赋值不是Lua中的表达式,因此不能将它们称为函数。

JavaScript要求在函数表达式周围或在整个函数周围加上括号,再加上函数调用括号组合:(function () { return 10; })()(function () { return 10; }())。括号确保将function () {}解释为函数表达式而不是函数声明。第二种构造形式(function () return 10 end())的等效项在Lua中无效。在JavaScript中,但不能在Lua中,您可以在函数表达式中提供一个名称,如果出现错误,该名称将显示在堆栈跟踪中:(function f() { return 10; })()(function f() { return 10; }())

关于javascript - 在lua中同时定义和调用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53656742/

10-12 00:07
查看更多