首页 > 解决方案 > Lua中不同类型的变量令人困惑

问题描述

它不是“参数”或“参数”,而是“变量函数”和“变量参数”,“变量数量的参数”。我发现这令人困惑,想知道这些东西是什么。

我在 Lua First Edition 5.1 的编程中找到了它

unpack 的一个重要用途是在通用调用机制中。通用调用机制允许您使用任何参数动态调用任何函数。例如,在 ANSI C 中,没有办法做到这一点。您可以声明一个接收可变数量参数的函数(使用 stdarg.h),并且可以使用指向函数的指针调用可变函数。但是,您不能使用可变数量的参数调用函数:您用 C 编写的每个调用都有固定数量的参数,并且每个参数都有固定的类型。在 Lua 中,如果你想用数组 a 中的变量参数调用变量函数 f,你只需写

标签: lua

解决方案


那段写得相当草率,解释了“参数”和“参数”,并使用定制的术语“变量函数”来表示我认为的“可变参数函数”,这是 C 实际拥有的。

无论如何,我认为本段旨在传达的观点如下。

C 具有可变参数函数:可以采用可变数量参数的函数。这意味着您可以使用任意数量的参数调用它们,然后函数将根据需要对其进行处理。但是,给函数的参数序列总是在调用点硬编码。您不能构建运行时值列表并将每个值作为多个不同的参数传递给可变参数函数,这样函数就会将列表中的每个值视为单独的参数。至少,如果不对呼叫站点的列表长度进行硬编码,您就无法做到这一点。

在 Lua 中,您可以这样做,获取“任意”长度列表(参数确实有最大限制)并调用一个函数,以便该函数将列表中的每个值视为一个不同的参数。无论列表中有多少值,f(unpack(list))都会将每个值作为单独的参数传递给f.


推荐阅读