之间有什么区别吗?
local splitPathFileExtension = function (res)
end
和
function splitPathFileExtension(res)
end
?我理解在第一种情况下这个函数是匿名的,但这是唯一的区别吗?
答案 0 :(得分:5)
它们几乎完全相同(除了你将第一个函数指定为local
而不指定第二个函数的事实。)
请参阅有关函数定义的manual:
声明
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的引用时,这只会有所不同。)
答案 1 :(得分:4)
所有函数都是匿名的,它们没有名称。函数定义实际上是一个赋值语句,它创建一个function
类型的值并将其赋值给变量。
第二个代码是语法糖,相当于:
splitPathFileExtension = function (res) end
因此,除了第一个是本地的,而第二个是全局的,两种函数定义方式之间没有区别。