【问题标题】:in Lua, how can I use a table as varargs (...)?在 Lua 中,如何将表用作可变参数(...)?
【发布时间】:2018-06-09 06:25:41
【问题描述】:

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])

【问题讨论】:

    标签: lua


    【解决方案1】:

    使用unpack函数:

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

    较新版本的 Lua 将 unpack function in the table module:

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

    这并不能直接回答您的问题,但正如lhf 指出的那样,以下效率更高:

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

    【讨论】:

    • 我不得不使用table.unpack 而不仅仅是unpack。可能是版本差异。
    • 我也不得不使用table.unpack。这可能对"new module system" introduced in Lua 5.1 进行。
    • 是的,解包功能在 Lua 5.2 中移到了 table 模块。这个答案是 8 岁。所以,我无法预测未来。 ;) 我已经更新了答案。
    【解决方案2】:

    使用table.concat 代替strjoin

    【讨论】:

    • 虽然从技术上讲您是正确的,但您的答案未被选中,因为我正在寻找一种解决方案,我也可以将其应用于其他一些类似的功能。
    • @AsaAyers,那么您最好从可以与表一起使用的开发人员函数中找到/请求,因为一旦您尝试使用包含 200 多个值的表,您的程序就会失败,因为它会溢出 Lua 本地函数堆栈。
    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多