在C中,我有格式字符串,例如:
char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);
现在,我可以使用格式字符串在lua中执行类似的操作吗?即我想要功能相当的东西:
name .. ", " .. msg .. "?"
但不是那么难看,在卢阿。
好的,所以我可以做string.format(“%s,%s?”,name,msg),但是我可以更进一步,比如perl风格,我可以去哪里:
"%name, %msg?"
谢谢!
答案 0 :(得分:6)
根据Lua Users Wiki article on String Interpolation,Lua没有提供内置的本地方式来执行此操作;但是,该页面上发布了几种解决方法。
这是一个简单的实现( - RiciLake):
function interp(s, tab) return (s:gsub('($%b{})', function(w) return tab[w:sub(3, -2)] or w end)) end print( interp("${name} is ${value}", {name = "foo", value = "bar"}) ) getmetatable("").__mod = interp print( "${name} is ${value}" % {name = "foo", value = "bar"} ) -- Outputs "foo is bar"
答案 1 :(得分:1)
我可以使用Lua格式字符串执行类似[printf]的操作吗?
是的。我一直这样做:
local function printf(...) return io.stdout:write(string.format(...)) end
local function fprintf(f, ...) return f:write(string.format(...)) end
修改品味。