Lua - 使用定义的更多参数调用函数
Posted
技术标签:
【中文标题】Lua - 使用定义的更多参数调用函数【英文标题】:Lua - calling a function with more params that defined 【发布时间】:2021-08-05 23:48:26 【问题描述】:出于某种原因,我需要了解一段未注释的 lua 代码。我不在 Lua 工作,但基于多种其他语言的知识,我能够充分理解它。不过,有一件事让我感到惊讶,我不知道如何理解它(因为我从未在其他语言中遇到过):
定义了一个函数,只有一个参数:
function dosomething(a)
...
end
该函数没有其他定义。并且该函数仅在程序的一个位置被调用 - 有两个参数:
dosomething(a, b)
根据上下文和名称,调用的第一个参数确实是函数的第一个参数。现在,另一个参数呢?尝试谷歌,但到目前为止没有运气......
感谢您的帮助。
【问题讨论】:
Lua 允许这样做,但b
什么都不做。
谢谢。我想这可能是答案,但不愿意相信它:)
【参考方案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 = b
和a, b = c
变成a, b = c, nil
【讨论】:
以上是关于Lua - 使用定义的更多参数调用函数的主要内容,如果未能解决你的问题,请参考以下文章