1

C では、次のような書式文字列があります。

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

さて、フォーマット文字列を使用してluaで同様のことを行うことはできますか? つまり、機能的に同等のものが必要です:

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

ルアでは、それほど醜くはありません。

さて、string.format("%s, %s?", name, msg) を実行できますが、さらに一歩進んで、perl スタイルのようなものに移動できます。

"%name, %msg?"

ありがとう!

4

2 に答える 2

6

Lua Users Wiki の String Interpolation に関する記事によると、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"
于 2010-05-01T00:29:40.677 に答える
1

[printf] に似たようなことを Lua フォーマット文字列で行うことはできますか?

はい。私はいつもこれを行います:

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

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

味に変更します。

于 2010-05-01T14:47:37.333 に答える