を変更しますlike:Luaは、私はLuaの印刷機能を利用して、LUAで、一般的なログ()関数を書いていた印刷機能に
Log = function(...) begin
return print(string.format(...))
end
しかし、これは正しい方法ですか?またはこれを行うためのより一般的な方法がありますか?
を変更しますlike:Luaは、私はLuaの印刷機能を利用して、LUAで、一般的なログ()関数を書いていた印刷機能に
Log = function(...) begin
return print(string.format(...))
end
しかし、これは正しい方法ですか?またはこれを行うためのより一般的な方法がありますか?
あなただけの値のシーケンスを印刷したい場合は、あなたがprint
とすることを行うことができます。
print(variable, 'String: %s ', str, 'Word: %d', w)
何がしたいように見えるが、何かもっと複雑です。
string.format
に現在の引数文字列と次のkパラメータを渡し、結果の文字列を出力します。 Advance kのパラメータ。 1行のシステムで行うことができるよりもはるかに複雑なアルゴリズムだ。あなたは正しいです
function Log(...)
local values = {}
local params = table.pack(...)
local curr_ix = 1
while (curr_ix <= params.n) do
local value = params[curr_ix]
if(type(value) == "string") then
--Count the number of `%` characters, *except* for
--sequential `%%`.
local num_formats = 0
for _ in value:gmatch("%%[^%%]") do
num_formats = num_formats + 1
end
value = string.format(table.unpack(params, curr_ix, num_formats + curr_ix))
curr_ix = curr_ix + num_formats
end
values[#values + 1] = value
curr_ix = curr_ix + 1
end
print(table.unpack(values))
end
string.format
の最初の引数は、残りの引数ではなく、書式指定子を必要とするため、現在のアプローチは機能しません。
とにかく、これは書式設定と一緒に印刷を結合する方法である:
Log = function(...)
return print(string.format(...))
end
そして、このようにそれを呼び出します。また、形式を作るために良いかもしれない
Log("String: %s Number: %d", 'hello' , 42)
より明示的な引数を使用し、print
の代わりにio.write
を使用して、印刷の制御を強化してください。
function Log(fmt, ...)
return io.write(string.format(fmt, ...))
end
@NicolBolas、今固定:
Luaの5.3を使用するには、ここではそのような機能は、(:やっとテストコード注)次のようになります。 –
形式を指定することは一般的な解決策ではありません。私のコード例はかなり基本的ですが、考え方は完全に汎用的です。Logger –
これは非常に興味深いです。私は、各ログのフラグを割り当てることによって、もう一つ加えました。ログ(エラー、...)ログ(情報、...)ログ(デバッグ、...)追加のパラメータを持つことにより、冗長性を制御することができました。あなたの助けを借りて+1 –
このループ 'for _ in value:gmatch(" %% [^ %%] ")do'は連続パーセントをスキップしようとしているにもかかわらず文字列' "5 %% less" 'にマッチします。 –