Pregunta
En C, que tienen cadenas de formato, algo como:
char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);
Ahora, puedo hacer algo similar en lua con cadenas de formato? Es decir. Quiero algo funcionalmente equivalente a:
name .. ", " .. msg .. "?"
pero no tan feo, en Lua.
Bueno, por lo que puedo hacer string.format ( "% s,% s?", Nombre, msg), pero puedo ir incluso un paso más allá, algo así como el estilo Perl, donde puedo ir:
"%name, %msg?"
Gracias!
Solución
De acuerdo con la href="http://lua-users.org/wiki/StringInterpolation" rel="noreferrer"> Usuarios Lua artículo , Lua no ofrece una incorporado en forma nativa para hacer esto; Sin embargo, hay un par tipo de soluciones ha escrito en esa página.
Esta es una implementación sencilla (- 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"
Otros consejos
¿Puedo hacer algo similar [a printf] con cadenas de formato Lua?
Sí Lo hago todo el tiempo:.
local function printf(...) return io.stdout:write(string.format(...)) end
local function fprintf(f, ...) return f:write(string.format(...)) end
Modificar al gusto.