找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3575|回复: 3

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

[复制链接]
  • 打卡等级:武林至尊

1087

主题

2143

回帖

4337

积分

院长

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

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

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

×
在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

主题

4

回帖

4

积分

按键手机班学员

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

0

主题

10

回帖

10

积分

按键手机班学员

鲜花
0
猫粮
64
发表于 2019-7-16 13:06:00 | 显示全部楼层
ipairs特性是这样的 老师你可以用pairs会遍历所有
  • 打卡等级:武林至尊

1087

主题

2143

回帖

4337

积分

院长

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

不, pairs也无法遍历到null的, 你可以自己试下看看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 23:03

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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