l'impression de chaîne lua
-
02-10-2019 - |
Question
En C, j'ai des chaînes de format, quelque chose comme:
char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);
Maintenant, je peux faire quelque chose de similaire en lua avec les chaînes de format? C'est à dire. Je veux quelque chose fonctionnellement équivalent à:
name .. ", " .. msg .. "?"
mais pas si laid, en lua.
Ok, donc je peux faire string.format ( "% s,% s?", Le nom, msg), mais je peux aller encore plus loin, quelque chose comme le style perl, où je peux aller:
"%name, %msg?"
Merci!
La solution
Selon le Lua Utilisateurs article Wiki sur chaîne Interpolation, Lua ne propose pas intégré de manière native de le faire; Cependant, il y a un couple tri des solutions de contournement affiché sur cette page.
Voici une implémentation simple (- 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"
Autres conseils
Puis-je faire quelque chose de similaire [à printf] avec des chaînes de format Lua?
Oui Je le fais tout le temps.
local function printf(...) return io.stdout:write(string.format(...)) end
local function fprintf(f, ...) return f:write(string.format(...)) end
Modifier au goût.