string.format可变数量的参数

时间:2016-06-13 10:08:16

标签: lua string-formatting

如果你知道要格式化什么,那么Luas string.format非常简单。 但是,我坚持编写一个函数,它使用通配符字符串进行格式化,并将可变数量的参数放入该空白字符串中。

示例:

str = " %5s %3s %6s %6s", 
val = {"ttyS1", "232", "9600", "230400"}

手动格式化非常简单:

string.format( str, val[1], val[2], val[3], val[4] )

与以下内容相同:

string.format(" %5s %3s %6s %6s", "ttyS1, "232", "9600","230400")

但是,如果我不想有第五或第六个参数怎么办? 例如:

 string.format(" %1s %2s %3s %4s %5s %6s %7s %", ... )

如何使用可变数量的参数实现string.format?

由于性能问题,我想避免逐个追加值。 该应用程序在嵌入式MCU上运行。

2 个答案:

答案 0 :(得分:0)

如果所有参数的格式相同,则使用string.rep生成任意格式的任意数量的重复。或者使用所有格式填充表格并使用table.concat。请记住,如果您不想重新排序参数,则无需在格式中指定参数索引。

如果您只需要将空格连接在一起,请使用更合适的工具:table.concat(table_of_strings, ' ')

答案 1 :(得分:0)

您可以使用varargs创建表格:

function foo(fmt, ...)
    local t = {...}
    return t[6] -- might be nil
end

如果您希望参数列表可能包含#,请不要在表上使用nil。而是使用select("#", ...)