在Lua中定义函数

3

我阅读到 Lua 中有两种不同的语法可以声明函数:

function pr()
    print("I'm function pr()")
end

printt = function()
    print("I'm function printt()")
end

pr()
printt()

虽然这些函数在调用时似乎完全相同,但我想知道它们在更低层次的实现上是否有区别。解释器是否完全相同处理它们还是在速度、实现或其他方面存在差异?


如果您对生成的代码有疑问,查看luac -l的输出可能会有所帮助。 - lhf
1
如果您从其他语言中转移了“声明”的某些概念,那么您应该知道,在Lua中,您正在创建一个函数定义,它是在运行时创建函数值的表达式。您的第二种语法更加明显。在您的示例中,甚至变量也没有“声明”。 - Tom Blodget
1个回答

2

这两者没有实际区别。第一个只是第二个形式的语法糖。

参考手册函数定义

The syntax for function definition is

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

The following syntactic sugar simplifies function definitions:

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

The statement

  function f () body end

translates to

  f = function () body end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接