Frage

In C, ich habe Formatstrings, so etwas wie:

char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);

Jetzt kann ich etwas ähnliches in lua mit Format-Strings? D. h Ich möchte etwas funktional äquivalent zu:

name .. ", " .. msg .. "?"

, aber nicht so hässlich, in lua.

Okay, also kann ich string.format tun ( "% s,% s?", Name, msg), aber kann ich gehen noch einen Schritt weiter, so etwas wie Perl-Stil, wo ich gehen kann:

"%name, %msg?"

Danke!

War es hilfreich?

Lösung

Nach dem Lua Benutzer Wiki-Artikel auf String Interpolation , ist Lua bieten keinen eingebauten in nativer Weg, dies zu tun; jedoch gibt es ein paar Art-of Abhilfen auf dieser Seite veröffentlicht.

Hier ist eine einfache Implementierung (- 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"

Andere Tipps

Can I do something similar [to printf] with Lua format strings?

Yes. I do this all the time:

local function printf(...) return io.stdout:write(string.format(...)) end

local function fprintf(f, ...) return f:write(string.format(...)) end

Modify to taste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top