紫猫学院社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 548|回复: 3

[教程源码] [Lua]在lua函数使用变长可选参数遇到nil处理方法

[复制链接]

629

主题

2018

帖子

2038

积分

院长

Rank: 9Rank: 9Rank: 9

猫粮
3562
QQ
发表于 2018-9-28 21:57:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在Lua函数中, 参数列表使用...来表示变长可选参数, 一般在函数中使用ipairs迭代器处理每一个参数.
但是如果遇到了传入参数包含nil的情况下, 迭代器ipairs就不好用了, 因为他遍历到nil就会终止处理.
此时, 可以使用另外两种方法来解决, 一种是使用table.pack构造新表后, 使用下标序号遍历.
另一种是借助select函数来处理参数, 详见下面代码例子

[Lua] 纯文本查看 复制代码
function foo(...)
    print("-------普通方法-------")
    for k,v in ipairs{...} do
        print(k,v)
    end
    
    print("-------方法1-------")
    local args = table.pack(...)
    for i = 1, #args do
        print(i, args[i])
    end
    
    print("-------方法2-------")
    for i = 1, select("#", ...) do
        local arg = select(i, ...)
        print(i, arg)
    end
    
end

foo("a","b",nil,"c","d")

回复

使用道具 举报

0

主题

3

帖子

3

积分

按键手机班学员

Rank: 8Rank: 8

猫粮
39
发表于 2018-9-29 06:52:40 | 显示全部楼层
顶一个,昨天刚请教可选参数,就看到这个帖子
回复

使用道具 举报

0

主题

10

帖子

10

积分

按键手机班学员

Rank: 8Rank: 8

猫粮
61
发表于 2019-7-16 13:06:00 | 显示全部楼层
ipairs特性是这样的 老师你可以用pairs会遍历所有
回复

使用道具 举报

629

主题

2018

帖子

2038

积分

院长

Rank: 9Rank: 9Rank: 9

猫粮
3562
QQ
 楼主| 发表于 2019-7-16 13:49:48 | 显示全部楼层
职业-学生 发表于 2019-7-16 13:06
ipairs特性是这样的 老师你可以用pairs会遍历所有

不, pairs也无法遍历到null的, 你可以自己试下看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫猫编程学院  

GMT+8, 2020-6-7 14:40

Powered by Discuz! X3.4

Copyright © 2012-2020 紫猫编程学院

快速回复 返回顶部 返回列表