在 Lua 中定义函数

我读到 Lua 中可以使用两种不同的语法来声明函数:

function pr()
    print("我是函数pr()")
end

printt = function()
    print("我是函数printt()")
end

pr()
printt()

虽然两个函数在被调用时似乎完全相同,但我想知道它们的底层实现是否有区别。解释器是完全相同的还是在速度、实现或其他方面有所不同?

点赞
用户1009479
用户1009479

从参考手册 Function Definitions 看来,这两者没有实质上的区别。第一个只是第二个形式的语法糖。

函数定义的语法如下:

functiondef ::= function funcbody
funcbody ::= ‘(’ [parlist] ‘)’ block end

以下是函数定义的语法糖:

stat ::= function funcname funcbody
stat ::= local function Name funcbody
funcname ::= Name {‘.’ Name} [‘:’ Name]

语句

function f () body end

转换成

f = function () body end
2017-01-08 06:06:12