使用 string.format 格式化可变数量的参数

Lua 的 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上。

点赞
用户936986
用户936986

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

如果您只是需要连接以空格分隔的字符串,请使用更合适的工具:table.concat(table_of_strings, ' ')

2016-06-13 11:27:56
用户282536
用户282536

你可以使用 varargs 创建表格:

function foo(fmt, ...)
    local t = {...}
    return t[6] -- 可能为空
end

PS,如果你预期参数列表可能包含 nil,不要对表格使用 #。而应该使用 select("#", ...)

2016-06-14 02:57:17