如何处理可变数量的参数

我明白了 arg 在后来版本的 Lua 中已经被废弃,不再受支持。我有很多在 Lua 5.1 中编写的带有可变数量的参数的函数,我正在迁移到 Lua 5.4,但我不知道如何处理它们而不使用 arg

-- 没有 arg,nil 条目将被忽略。
local function printMyArgumentsA( ... )
    local t = {...}
    for i, v in pairs( t ) do
        print( i, v )
    end
    print("")
end
printMyArgumentsA( 1, nil, 3, nil )

-- 有了 arg,我知道有多少条目,所以我知道哪些是 nil。
local function printMyArgumentsB( ... )
    for i = 1, arg.n do
        print( i, arg[i] )
    end
    print("")
end
printMyArgumentsB( 1, nil, 3, nil )

我该如何在后来版本的 Lua 中获取发送到函数的参数数量,而不使用 arg 呢?

点赞
用户3574628
用户3574628

使用table.pack。它存储一个n字段,就像旧代码中一样。

local function printMyArgumentsB( ... )
    local arg <const> = table.pack(...)
    for i = 1, arg.n do
        print( i, arg[i] )
    end
    print()
end
printMyArgumentsB( 1, nil, 3, nil )

如果你不想创建一个表,可以使用select('#', ...)获取...中的值的数量。这里可以查看select

2021-08-07 14:53:42