如何处理可变数量的参数

How to handle variable number of arguments

我了解到 arg 已弃用,并且在 Lua 的更高版本中不再受支持。我有很多用 Lua 5.1 编写的函数,它们具有可变数量的参数,我正在转向 Lua 5.4,但我不知道如何在没有 arg.[=14 的情况下处理它们=]

-- Without arg, nil entries are ignored.
local function printMyArgumentsA( ... )
    local t = {...}
    for i, v in pairs( t ) do
        print( i, v )
    end
    print("")
end
printMyArgumentsA( 1, nil, 3, nil )


-- With arg, I know how many entries there were, so I know which are nil.
local function printMyArgumentsB( ... )
    for i = 1, arg.n do
        print( i, arg[i] )
    end
    print("")
end
printMyArgumentsB( 1, nil, 3, nil )

在更高版本的 Lua 中,如何在不使用 arg 的情况下获取发送到函数的参数数量?

使用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 )

如果您不想创建 table,您可以使用 select('#', ...) 来获取 ... 中的值的数量。请参阅此处 select