Lua中的函数定义

有什么区别吗?

local splitPathFileExtension = function (res)
end

function splitPathFileExtension(res)
end

?我理解第一个案例中这个函数是匿名的,但这是唯一的区别吗?

点赞
用户257418
用户257418

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

请参阅有关函数定义的手册

语句

    function f () body end

对应于

    f = function () body end

语句

    function t.a.b.c.f () body end

转换为

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

语句

    local function f () body end

转换为

    local f; f = function () body end

而不是

    local f = function () body end

(仅当函数的主体包含对 f 的引用时才有区别。)

2015-07-24 07:45:55
用户1009479
用户1009479

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

第二个代码是一种调用语法糖,它相当于:

splitPathFileExtension = function (res) end

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

2015-07-24 07:52:42