【问题标题】:string.format variable number of argumentsstring.format 可变参数数量
【发布时间】:2016-06-14 10:57:17
【问题描述】:

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 上运行。

【问题讨论】:

  • str:format(unpack(val))
  • 这么简单...如果你把它放在答案中,我可以将其标记为正确答案。

标签: lua string-formatting


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用可变参数创建表:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多