質問
Cでは、形式の文字列があります。
char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);
さて、私は形式の文字列でLUAで同様のことをすることができますか?つまり、機能的に同等のものが欲しい:
name .. ", " .. msg .. "?"
しかし、それほどugいものではありません。
さて、string.format( "%s、%s?"、name、msg)を行うことができますが、さらに一歩進むこともできます。
"%name, %msg?"
ありがとう!
解決
による 文字列補間に関するLUAユーザーWikiの記事, 、Luaはこれを行うための内蔵ネイティブの方法を提供していません。ただし、そのページに掲載されているいくつかのある種の回避策があります。
これが1つの簡単な実装です( - 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"
他のヒント
LUA形式の文字列で[printfに]類似したことをすることはできますか?
はい。 私はいつもこれをします:
local function printf(...) return io.stdout:write(string.format(...)) end
local function fprintf(f, ...) return f:write(string.format(...)) end
味に変更します。
所属していません StackOverflow