lua - Lua中不同类型的变量令人困惑
问题描述
它不是“参数”或“参数”,而是“变量函数”和“变量参数”,“变量数量的参数”。我发现这令人困惑,想知道这些东西是什么。
我在 Lua First Edition 5.1 的编程中找到了它
unpack 的一个重要用途是在通用调用机制中。通用调用机制允许您使用任何参数动态调用任何函数。例如,在 ANSI C 中,没有办法做到这一点。您可以声明一个接收可变数量参数的函数(使用 stdarg.h),并且可以使用指向函数的指针调用可变函数。但是,您不能使用可变数量的参数调用函数:您用 C 编写的每个调用都有固定数量的参数,并且每个参数都有固定的类型。在 Lua 中,如果你想用数组 a 中的变量参数调用变量函数 f,你只需写
解决方案
那段写得相当草率,解释了“参数”和“参数”,并使用定制的术语“变量函数”来表示我认为的“可变参数函数”,这是 C 实际拥有的。
无论如何,我认为本段旨在传达的观点如下。
C 具有可变参数函数:可以采用可变数量参数的函数。这意味着您可以使用任意数量的参数调用它们,然后函数将根据需要对其进行处理。但是,给函数的参数序列总是在调用点硬编码。您不能构建运行时值列表并将每个值作为多个不同的参数传递给可变参数函数,这样函数就会将列表中的每个值视为单独的参数。至少,如果不对呼叫站点的列表长度进行硬编码,您就无法做到这一点。
在 Lua 中,您可以这样做,获取“任意”长度列表(参数确实有最大限制)并调用一个函数,以便该函数将列表中的每个值视为一个不同的参数。无论列表中有多少值,f(unpack(list))
都会将每个值作为单独的参数传递给f
.
推荐阅读
- arrays - 计数集在整数数组中具有相同的差异
- python - Python根据另一个列表中的名称在一个列表中添加值
- android - 在使用 Android Gradle 插件 3.3.0 合并资源期间构建失败
- sql - 如何处理数据字段中的范围
- javascript - 我一直不得不根据我是在本地主机上开发还是推送到服务器来更改 window.location.href
- javascript - 使用 AJAX 更新的单页应用程序最有用的 javascript 设计模式?
- batch-file - 为什么我的文本采集器不能批量工作?
- citrus-framework - 使用 JavaDSL 自定义功能
- spring - Spring - 无法将 java.lang.String 类型的属性值转换为所需的 java.util.Date 类型
- javascript - 将 css 导入 React 组件后未添加样式