如何处理可变数量的参数
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。
我了解到 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。