【问题标题】:Defining functions in Lua在 Lua 中定义函数
【发布时间】:2017-05-22 15:32:58
【问题描述】:

我读到我们可以用两种不同的语法在 Lua 中声明一个函数:

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

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

pr()
printt()

虽然这些函数在被调用时似乎以完全相同的方式工作,但我想知道它们在较低级别的实现之间是否存在差异。解释器对它们的处理是完全相同的,还是在速度、实现或任何方面有所不同?

【问题讨论】:

  • 如果您对生成的代码有疑问,查看luac -l 的输出可能会有所帮助。
  • 如果您从另一种语言转移对术语“声明”的一些理解,您应该知道在 Lua 中您正在创建一个函数定义,它是一个表达式,在运行时评估时会创建一个函数值.您的第二种语法使这一点更加明显。在您的示例中,甚至没有“声明”变量。

标签: function lua


【解决方案1】:

两者之间没有真正的区别。第一个只是第二种形式的语法糖。

来自参考手册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

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 2014-02-10
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2023-02-14
    • 2019-07-15
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多