Lua中的函数定义

Lua中的函数定义,lua,Lua,两者之间有什么区别吗 local splitPathFileExtension = function (res) end 及 ??我知道在第一种情况下,这个函数是匿名的,但这是唯一的区别?它们几乎完全相同(除了您将第一个函数指定为local,而不是第二个) 请参见有关函数定义的说明: 声明 function f () body end function t.a.b.c.f () body end local function f () body end 对应于

两者之间有什么区别吗

local splitPathFileExtension = function (res)
end


??我知道在第一种情况下,这个函数是匿名的,但这是唯一的区别?

它们几乎完全相同(除了您将第一个函数指定为
local
,而不是第二个)

请参见有关函数定义的说明:

声明

    function f () body end
    function t.a.b.c.f () body end
    local function f () body end
对应于

    f = function () body end
声明

    function f () body end
    function t.a.b.c.f () body end
    local function f () body end
转化为

    t.a.b.c.f = function () body end
    local f; f = function () body end
声明

    function f () body end
    function t.a.b.c.f () body end
    local function f () body end
转化为

    t.a.b.c.f = function () body end
    local f; f = function () body end

    local f = function () body end
(这仅在函数体包含对f的引用时才有区别。)


所有函数都是匿名的,它们没有名称。函数定义实际上是一个赋值语句,它创建
function
类型的值并将其赋值给变量

第二个代码是语法糖,相当于:

splitPathFileExtension = function (res) end

因此,除了第一种是局部的而第二种是全局的之外,函数定义的两种方式之间没有区别。

注意:您必须完全按照说明进行去糖。变量只有在不是局部变量时才是全局变量。例如,将问题中的两个赋值语句按顺序放在一起,局部变量splitPathFileExtension被赋值两次。应为:“您已将第一个变量指定为局部变量”。函数是值,因此它们没有范围类别。