Lua - 调用一个比定义参数更多的函数
由于某种原因,我需要理解一段未注释的 Lua 代码块。虽然我没有在 Lua 中工作,但我能够根据多种其他语言的知识来理解它。有一件事让我感到惊讶,而且我不知道如何理解它(因为我在其他语言中从未遇到过):
定义了一个带有一个参数的函数:
function dosomething(a)
...
end
没有其他对该函数的定义。并且该函数仅在程序的一个位置被调用 - 使用两个参数:
dosomething(a, b)
根据上下文和名称,调用的第一个参数确实打算是函数的第一个参数。现在,其他参数呢?已经试图使用谷歌搜索,但迄今为止没有运气...
谢谢帮助。
尝试了谷歌搜索,但到目前为止都没有收获...
下次尝试 Lua 手册。
参数相当于局部变量,其值初始化为参数值:
parlist ::= namelist [',' '...'] | '...'
当调用 Lua 函数时,它会将参数列表调整为其参数列表的长度,除非函数是 vararg 函数,该函数在其参数列表的末尾用三个点 ('...') 表示。
因此,定义为
function dosomething(a) end
的函数有一个参数 a。
如果以 dosomething(c, d) 的形式调用 Lua,它将首先评估参数列表。因此,如果 d 是一个函数,它将被调用并替换为其返回值。
然后会发生赋值。对于所有赋值,值列表都将根据变量数进行调整。d 将被忽略,此时就剩下 a = c。
请参阅3.3.3 赋值。
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 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

任何额外的参数都会被忽略。
任何缺失的参数都会被赋予值为nil。