【问题标题】:Different types of variables in Lua are confusingLua中不同类型的变量令人困惑
【发布时间】:2020-02-12 05:54:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: lua


    【解决方案1】:

    那段写得相当草率,解释了“参数”和“参数”,并使用了定制的术语“变量函数”,我认为它原本是“variadic function”,而这正是 C 实际拥有的。

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

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

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

    【讨论】:

    • 你能更清楚地解释一下“可变数量的参数”吗?其他都很棒
    • 以及如何使用 unpack,因为某些版本 1 代码已过时。这就是我使用它的方式function new(a) return a end print(new(unpack({1, "bruh", 3})))
    • @BlaztOne: new 不是可变参数函数;它只需要一个参数。那么,当您传递 3 个参数时,您到底期望发生什么?它忽略了其他两个。
    • @BlaztOne:你引用了一本 Lua 5.1 的书。如果您没有使用 Lua 5.1,那么您应该说明您正在使用的 Lua 版本。
    • "我认为主要问题是:“什么是可变参数数量”,但现在我想我也需要知道什么是可变参数数量...... ” 术语“参数”是指函数在其定义中所采用的内容。术语“参数”是指函数被调用时给出的表达式。 Lua 参考手册很好地保持了这两个术语的正确性。您链接到的页面正在谈论传递可变数量的参数
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 2012-09-12
    • 2021-05-15
    • 2013-09-22
    • 2015-02-26
    • 2017-12-05
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多