在Lua中,我如何将表格用作变长参数(...)?

11

strjoin接受一个字符串和可变数量的参数。我正在寻找一种方法来获取一个具有可变数量参数的表格,并将表格中的每个项目用作另一个参数。

local myTable = {
    'a',
    'b',
    'c',
}
-- This is what I want except that I don't want to hard code
-- a specific number of parameters

local myString = strjoin(' ', myTable[1], myTable[2], myTable[3])
2个回答

24
使用unpack函数:
local myString = strjoin(' ', unpack(myTable))

较新版本的Lua将unpack函数放在了table模块中

local myString = strjoin(' ', table.unpack(myTable))

这并不能直接回答你的问题,但正如lhf所指出的那样,以下方法更加高效:

local myString = table.concat(myTable, ' ')

1
我不得不使用table.unpack而不是仅使用unpack。可能是版本差异的原因。 - Stefan Monov
我也不得不使用table.unpack。这可能是由于Lua 5.1中引入的“新模块系统”。 - Sled
是的,在Lua 5.2中,unpack函数被移动到了table模块中。这个回答已经有8年了,所以我无法预测未来。 ;) 我已经更新了答案。 - Judge Maygarden

6
请使用 table.concat 取代 strjoin

虽然从技术上讲你是正确的,但我没有选择你的答案,因为我正在寻找一个可以应用于其他类似函数的解决方案。 - Asa Ayers
1
@AsaAyers,你最好从开发人员那里找到/请求能够与表一起使用的函数,因为一旦你尝试使用200+值的表,你的程序将会失败,因为它会溢出Lua本地函数堆栈。 - Oleg V. Volkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接