質問

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

味に変更します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top