lua ... 可变长参数

本文介绍了Lua语言中使用“...”表示可变参数的方法,包括如何在函数中使用这些参数,以及如何从命令行传递参数给Lua脚本。文章通过实例展示了不同场景下可变参数的应用。
lua 中 … 在参数列表中意为”可变参数”,这个可变是指,通过这个可以输入很多参数,但是不需要一一列举出来!~

例子:

function a(...)
    local a1 ,a2,a3,a4 = ...
    print("this is local num=",a1,a2,a3,a4)
    return a1, a2, a3, a4
end

local at1,at2,at3,at4 = a(1,2,3,4)
print("this is the function result=",at1,at2,at3,at4)


输出:
this is local num=1 2 3 4
this is the function result=1 2 3 4


在函数内通过表访问可变参数,把可变参数放入表内
function rest(...)
    -- 把可变参数放在表类
    local args = { ... }
    print(#args)
end

print(rest(1, 2, 3))

‘#’ 操作符表示得到数组的长度


输出:
3


放在顶部的可变长参数
在一些lua文件中可以在头部看到local A,B = …,这种参数是通过命令行等其他外部环境传入的参数,如:
-- A.lua文件
local A, B =...
print(A, B)


输出:
1 2

在shell或者命令行中调用

lua A.lua 1 2
 本套课程分为基础与中级两部分,分别就lua语言的各方面知识点进行探讨,学习完本套课程,对于后续Xlua(Tolua等框架)技术的学习提供强大的语言技术保证。       本套lua课程采用入门与商业级两种开发IDE进行教学:入门级的SciTE内置IDE与商业级的IDEA lua插件。本套课程学习完毕,对于除了传统手游外,在VR、AR、商业级大型应用程序、嵌入式设备开发等领域都有较强的指导作用。           《lua中级篇》分为:“函数的进阶”、“字符串进阶”、“Table进阶”、“元表”、“OOP面向对象”、“协同程序”、“IO操作”、“调试与运行”等八个大的章节,详细深入讲解lua开发的方方面面。        内容包含lua可变参数、闭包、模块、函数尾调用、字符串模式匹配、字符串不变性原理、矩阵、链表、元表详解与应用、协同的生命周期与生产消费者问题、lua文件各种读写操作、lua执行外部代码与错误异常处理垃圾收集机制等。       最后,lua中级篇的学习,对于广大学员开发商业级lua热更新技术,具有不可替代的重要作用! 热更新系列(技术含量:中高级):B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136 
### Lua 中可变参数的使用方法及其实现 在 Lua 编程语言中,支持函数接收不定数量的参数,这种特性被称为 **可变参数** 或者 **变长参数**。以下是关于 Lua 可变参数的具体用法及其实现方式。 #### 1. 声明带有可变参数的函数 当定义一个可以接受任意数量参数的函数时,在形参列表最后加上三个点 `...` 即可表示这些额外的参数[^1]。例如: ```lua function myFunction(arg1, ...) -- 函数体 end ``` 在这个例子中,除了第一个固定参数 `arg1` 外,其余传入的参数会被视为可变参数处理。 #### 2. 访问可变参数的方式 访问可变参数有两种常见方法:一种是通过 `{...}` 将其转换成表;另一种则是利用内置函数 `select` 来获取特定位置上的值或者统计总共有多少个参数被传递进来[^2]。 ##### (a) 使用表格形式存储所有额外输入项 可以通过创建一个新的数组型表来保存所有的附加参数: ```lua local extraArgs = {...} print(extraArgs[1], extraArgs[2]) -- 输出前两个额外参数 ``` 注意这里得到的是原始数据类型的副本而不是引用关系[^4]。 ##### (b) 利用 select() 获取具体信息 `select()` 是专门用于操作多返回值的一个工具,它能够帮助我们提取指定索引处的实际数值或者是计算出一共接收到几个这样的项目数: ```lua -- 统计实际传入了多少个参数 print(select("#", ...)) -- 提取第三个参数的内容 print(select(3, ...)) ``` 如果是在较旧版本比如 Lua 5.0 当中的情况,则会自动存在一个叫做 `arg` 的隐藏局部变量以及它的成员属性 `.n` 表达相同含义。 #### 3. 实际应用案例展示 下面给出一段完整的演示代码片段,综合展示了上述知识点的应用场景: ```lua function sum(...) local nums = {...} -- 转化为 table 类型 local total = 0 for i=1,#nums do -- 遍历整个集合求和 total = total + tonumber(nums[i]) end return total -- 返回最终结果 end print(sum(1,2,3,"4")) -- 测试运行效果 -> 应该打印 '10' ``` 以上程序实现了简单的累加功能,并允许用户一次性提交多个待相加的数据对象给定目标函数调用。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值