【问题标题】:Lua - calling a function with more params that definedLua - 使用定义的更多参数调用函数
【发布时间】:2021-08-05 23:48:26
【问题描述】:

出于某种原因,我需要了解一段未注释的 lua 代码。我不在 Lua 工作,但基于多种其他语言的知识,我能够充分理解它。不过,有一件事让我感到惊讶,我不知道如何理解它(因为我从未在其他语言中遇到过):

定义了一个函数,只有一个参数:

function dosomething(a) 
  ...
end

该函数没有其他定义。并且该函数仅在程序的一个位置被调用 - 有两个参数:

  dosomething(a, b)

根据上下文和名称,调用的第一个参数确实是函数的第一个参数。现在,另一个参数呢?尝试谷歌,但到目前为止没有运气......

感谢您的帮助。

【问题讨论】:

  • Lua 允许这样做,但 b 什么都不做。
  • 谢谢。我想这可能是答案,但不愿意相信它:)

标签: function parameters lua


【解决方案1】:

任何额外的参数都会被忽略。

任何缺失的参数都被赋值为 nil。

【讨论】:

    【解决方案2】:

    尝试谷歌,但到目前为止没有运气......

    下次试试 Lua 手册。

    来自Lua 5.4 Reference Manual 3.4.11 - Function Definitions

    参数充当局部变量,使用 参数值:

    parlist ::= namelist [‘,’ ‘...’] | ‘...’ 当一个 Lua 函数是 调用时,它将参数列表调整为其参数列表的长度 参数,除非该函数是可变参数函数,即 由参数列表末尾的三个点('...')表示。

    所以一个函数定义为

    function dosomething(a) end
    

    只有一个参数a

    调用dosomething(c, d) Lua 将首先评估参数列表。因此,如果d 是一个函数,它将被调用并替换为它的返回值。

    然后会发生分配。对于所有赋值,值列表将根据变量的数量进行调整。 d 将被忽略,留下a = c

    参考3.3.3 Assignment

    Lua 允许多重赋值。因此,赋值的语法 在左侧定义变量列表和表达式列表 在右侧。两个列表中的元素用逗号分隔:

    stat ::= varlist ‘=’ explist varlist ::= var {‘,’ var} explist ::= exp {‘,’ exp} 表达式在第 3.4 节中讨论。

    赋值前,值列表调整为长度 变量列表。如果值多于所需值,则 多余的值被丢弃。如果值比需要的少, 列表用 nil 扩展。

    所以a = b, c 变成a = ba, b = c 变成a, b = c, nil

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多