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等技术内容,点击立即学习:


相关文章
|
8月前
|
消息中间件 Kubernetes NoSQL
Lua基本数据类型
Lua基本数据类型
|
8月前
|
C语言
C语言调用lua
C语言调用lua
65 2
|
8月前
|
消息中间件 自然语言处理 Kubernetes
Lua闭包和Upvalue上值
Lua闭包和Upvalue上值
|
存储 算法 JavaScript
[✔️]lua for循环
[✔️]lua for循环
121 0
|
C# 索引
lua语言——变量
lua语言——变量
157 0
|
XML 存储 Java
【Lua基础 第1章】初识Lua脚本语言、数据类型、全局变量、关键字的使用
初识Lua脚本语言、数据类型、全局变量、关键字的使用
169 0
【Lua基础 第1章】初识Lua脚本语言、数据类型、全局变量、关键字的使用
|
索引 容器
lua语言——迭代器
lua语言——迭代器
131 0
Lua语言——运算符
Lua语言——运算符
157 0
04 Lua 运算符
Lua 体积小、启动速度快,一个完整的 Lua 解释器不过200k,在所有脚本引擎中,Lua 的速度可以说是最快的。所以 Lua 是作为嵌入式脚本的最佳选择。
04 Lua 运算符
05 Lua 控制结构
Lua 体积小、启动速度快,一个完整的 Lua 解释器不过200k,在所有脚本引擎中,Lua 的速度可以说是最快的。所以 Lua 是作为嵌入式脚本的最佳选择。
05 Lua 控制结构