在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/