Lua中如何用gsub将数字转为指定位数字符串(不转存为字符串)
问题描述
我编写了一个返回字符串的Lua函数,函数内部有一个存储字符串和数字类型变量的表,代码如下:
function myfunction(format) -- do something myTable={} myTable["a"] = "HelloWord" myTable["b"] = number1 -- 范围(0-500) myTable["c"] = number2 -- 范围(0-50) local outputString = format:gsub("%%(%a+)", myTable) return outputString end
当前调用myfunction("%a-%b-%c")输出为HelloWord-3-9,我需要输出HelloWord-003-09,希望在local outputString = format:gsub("%%(%a+)", myTable)相关逻辑里直接实现,而非将b和c转存为字符串。补充:若使用myTable["b"] = string.format("%0.3i", number1)和myTable["c"] = string.format("%0.2i", number2),则需要将变量存为字符串,这不是我想要的。
解决方案
可行。你可以将gsub的第二个参数从表替换为自定义替换函数,在函数内部根据匹配到的键名对数字进行格式化输出,同时保持myTable中的变量仍为数字类型。
修改后的代码如下:
function myfunction(format) -- 示例赋值,实际场景中number1、number2应已定义 local number1 = 3 local number2 = 9 myTable={} myTable["a"] = "HelloWord" myTable["b"] = number1 -- 保持数字类型 myTable["c"] = number2 -- 保持数字类型 local outputString = format:gsub("%%(%a+)", function(key) local value = myTable[key] -- 根据键名判断格式化规则 if key == "b" then return string.format("%03d", value) elseif key == "c" then return string.format("%02d", value) else -- 字符串或其他键直接返回原值 return value end end) return outputString end -- 测试调用 print(myfunction("%a-%b-%c")) -- 输出:HelloWord-003-09
核心逻辑说明
gsub支持传入函数作为替换规则:当匹配到%a+格式的键时,会调用该函数并传入匹配到的键名。- 在替换函数内部,根据键名
b和c分别应用补零格式化规则,其他键(如a)直接返回原值。 myTable中的number1和number2始终保持数字类型,完全满足需求。
内容的提问来源于stack exchange,提问作者JACK
相关产品推荐
相关产品推荐

