Lua中实现类似C#风格format函数

Lua 的字符串格式化是继承 C 的方式,采用%s、%d、%f 等方式进行格式化,而在 C# 中采用 {0}、{0:D2} 的方式进行格式化,下面代码在 Lua 中实现 C# 形
式的格式化,这里只实现了{0}形式,对于{0:D2}等形式不支持。

这种实现与 lua 的格式化相比,并不具备性能优势,完全是因为个人习惯使用 C# 的格式化形式。

1
2
3
4
5
6
7
8
9
10
11
12
13
function Format(fmt,...)
assert(fmt ~= nil,"Format error:Invalid Format String")
local parms = {...}

function search(k)
--从 C# 数组习惯转到 Lua
k = k+1
assert(k <= #parms and k >=0 ,"Format error:IndexOutOfRange")
return tostring(parms[k])
end

return (string.gsub(fmt,"{(%d)}",search))
end

测试代码如下:

1
2
print(Format("{0},{1},{2}","abc","cc",12))
print(Format("{2},{0},{1}","abc","cc",12))