Lua对可变参数的处理

简介: Lua对可变参数的处理

一、select处理

-- 返回可变参数的部分参数,从第n个位置开始,如果n超过了实际元素的个数,则没有任何打印
select(n, ...)
-- 返回可变参数元素的个数
select("#", ...)

代码示例1

function test(...)
    print("当前table中的元素个数为:", select("#", ...))
    print(select(1, ...))
    print(select(2, ...))
    print(select(3, ...))
    print(select(4, ...))
    print(select(5, ...))
    print(select(10, ...))
end
test(1, 2, 3, true, "lwang")

运行结果

代码示例2:求若干数据的和

function add(...)
    local sum = 0
    local count = select("#", ...)
    print("当前table中的元素个数为:", count)
    for i=1, count do
        sum = sum + select(i, ...)
    end
    print("sum = ", sum)
end
add(1, 2, 3, 4, 5)

运行结果

二、pack处理

table.pack(…).n 原理是将可变参数打包成一个table,且会在最后多出一个n键,其对应的值就是table元素的个数

-- pack 处理可变参数
-- 
function add (...)
    local count = table.pack(...).n
    print("当前参数的个数为: ", count) 
    -- 将table保存在tmp中
    tmp = table.pack(...);
    sum = 0
    -- 版本1:遍历table,求和
    for k, v in pairs(tmp) do
        if k ~= "n" then
            sum = sum + v
        end
        -- print(k, v)
    end
    -- 版本2:遍历table,求和
    -- for i=1, count do
    --     if tmp[i] ~= nil then
    --         sum = sum + tmp[i]
    --     end
    -- end
    return sum
end
print("sum = ", add(1, 2, 3, 4, 5, nil, 10, nil, nil)) 

运行结果

2.2 unpack

作用:将table解成可变参数

语法:

-- i 是起始位置  j 是结束位置
table.unpack(list, i, j)

规则:

  • 如果 i 和 j 都不传,默认解出全部参数
  • 如果只传一个参数i,表示解出从i位置开始的全部参数

代码示例

function func()
    return table.pack(1, 2, 3, 4, 5)
end
print(func)
print(table.unpack(func()))
print(table.unpack(func(), 4))
print(table.unpack(func(), 2, 4))
print("===============")
tmp = func()
a, b, c, d, e = table.unpack(tmp)
print(a, b, c, d, e)

运行结果

三、补充

获取参数个数的第三种方法,本质还是可变参转成table

function func2(...)
    tmp = {...}
    local count = #tmp;
    print("参数个数为:", count)
    for k, v in pairs(tmp) do
        print(k, v)
    end
end
func2(1, 3, 4, 7, 8, nil, "lwang")

运行结果


推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:


相关文章
Lua 函数
Lua函数是主要的抽象机制,用于执行任务或计算值。函数定义格式包括可选的函数作用域(默认全局)、函数名、参数列表和函数体。例如,定义一个名为`max`的函数,接收两个参数`num1`和`num2`,返回它们中的最大值。函数可以作为参数传递,如示例中将`myprint`函数传递给`add`函数,实现功能组合。
|
9天前
|
存储 编译器
Lua 变量
Lua变量分全局、局部和表域,全局变量默认,局部由`local`声明,作用域始于声明至语句块结束。变量初值为`nil`。示例展示了全局和局部变量的用法,以及其作用域影响。执行显示:5 nil, 6 6, 5 6。
|
4月前
|
消息中间件 自然语言处理 Kubernetes
Lua闭包和Upvalue上值
Lua闭包和Upvalue上值
|
Python
【Python】10_局部变量&全局变量 + 函数的返回值
​ 4、局部变量 def func(): # 定义局部变量 num = 100 print(num) def func1(): # 定义局部变量 num = 200 # 两个num是没有任何关系的 print(num) # 函数调用 func() func1() # 探究:局部变量能否在函数外部使用 # print(num) # 代码报错,局部变量不能在函数外部访问 5、全局变量 (globe) globe方法:可以让局部变量在全局变量中使用,放在修改之前,(类似定义) globe 变量名 # 定义全局变量
99 0
|
10月前
|
数据库 Python
Python 纯函数与副作用,可变参数与不可变参数
在Python的函数式编程中,Python既可以在调用时对实参进行修改,也可以通过返回值返回函数调用结果。这样的既有返回值又能修改传参的模式,在进行编程开发时,容易遗漏修改传参对结果的影响
|
C语言 索引
lua语言——函数
lua语言——函数
118 0
|
C# 索引
lua语言——变量
lua语言——变量
112 0
|
数据采集 大数据 开发者
Lua 语法函数|学习笔记
快速学习 Lua 语法函数
71 0
Lua 语法函数|学习笔记
|
Python
Python学习:定义函数的默认参数和可变参数
定义函数的默认参数和可变参数
85 0
【Swift4】(5) 函数基本使用 | 可变参数 | inout引用传递 | 函数类型返回值 | 函数嵌套
【Swift4】(5) 函数基本使用 | 可变参数 | inout引用传递 | 函数类型返回值 | 函数嵌套
160 0