LuaでStringBuffer機能を実現
1259 ワード
Luaでは、文字列は定数であり、文字列コネクタ"."2つの文字列を接続します.例えばfirst_str = first_str .. second_str、じゃあ元のfirst_strとsecond_strはゴミとして回収を待つstrは新しい文字列を参照しており,プログラムに大量の文字列接続操作があると性能が低下する.Luaはシンプルな言語で、StringBufferの実装はありませんが、パフォーマンスの問題を回避するために簡単なStringBuffer実装を書くことができます.
まずStringBufferというtableを定義し、このStringBufferが呼び出されたときにオブジェクト向けに見えるようにします:)次にappendとtostrをそれぞれ2つの方法で定義します.実現の原理は、appendがtableですべての文字列を保存し、tostrが文字列を保存したtableをconcatで本物の文字列に変換することです.
呼び出すときは大体次のように、コードを抜粋しました.の
LuaでこのようなStringBufferを実現することで、潜在的な性能問題を回避できるとともに、コードをより分かりやすく見せることができます~よし、以前のコードを再構築します.の
まずStringBufferというtableを定義し、このStringBufferが呼び出されたときにオブジェクト向けに見えるようにします:)次にappendとtostrをそれぞれ2つの方法で定義します.実現の原理は、appendがtableですべての文字列を保存し、tostrが文字列を保存したtableをconcatで本物の文字列に変換することです.
StringBuffer = {}
StringBuffer.append = function(t, str)
if t and str then
table.insert(t, str)
end
end
StringBuffer.tostr = function(t)
if t then
return table.concat(t)
end
end
StringBuffer.new = function() return {} end
呼び出すときは大体次のように、コードを抜粋しました.の
all_assets = StringBuffer.new()
for asset in ctx:allassets() do
StringBuffer.append(all_assets, asset:id())
StringBuffer.append(all_assets, ', ')
end
result = StringBuffer.tostr(all_assets)
print (result)
LuaでこのようなStringBufferを実現することで、潜在的な性能問題を回避できるとともに、コードをより分かりやすく見せることができます~よし、以前のコードを再構築します.の