Domanda
In C, ho stringhe di formato, qualcosa come:
char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);
Ora, posso fare qualcosa di simile in lua con stringhe di formato? Cioè Voglio qualcosa funzionalmente equivalente a:
name .. ", " .. msg .. "?"
, ma non così brutto, in Lua.
Va bene, così posso fare String.Format ( "% s,% s?", Il nome, msg), ma posso andare anche un passo in più, qualcosa di simile stile Perl, dove posso andare:
"%name, %msg?"
Grazie!
Soluzione
Secondo il href="http://lua-users.org/wiki/StringInterpolation" rel="noreferrer"> Lua Utenti articolo , Lua non offre un incorporato in modo nativo per fare questo; tuttavia, ci sono un paio sorta-di soluzioni postato su quella pagina.
Ecco un semplice implementazione (- 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"
Altri suggerimenti
Posso fare qualcosa di simile [a printf] con stringhe di formato Lua?
Sì Lo faccio tutto il tempo:.
local function printf(...) return io.stdout:write(string.format(...)) end
local function fprintf(f, ...) return f:write(string.format(...)) end
Modifica per il gusto.