Lua中不同类型的变量很困惑

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

我在Programming in Lua First Edition 5.1中找到了它

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

点赞
用户734069
用户734069

那一段话写得相当草率,误用“参数”和“参数”一词,并使用定制的“变量函数”术语来代替我认为应该是 “variadic function” 的东西,这正是C实际拥有的功能。

无论如何,我认为这段话想要传达的观点是以下内容。

C具有可变参数的函数:可以接受可变数量的参数的函数。这意味着您可以使用任意数量的参数调用它们,然后函数将根据其需求进行处理。然而,给函数传递的参数序列始终在调用点硬编码。您无法构建值列表的运行时列表,并将每个值作为多个不同的参数传递给可变参数的函数,该函数会将列表中的每个值视为单独的参数。至少,您不能在不在调用点硬编码列表长度的情况下这样做。

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

2020-01-01 06:04:37