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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top