Lua中實(shí)現(xiàn)StringBuffer功能
在Lua中,字符串是一個(gè)常量,如果用字符串連接符“..”把2個(gè)字符串連接起來,例如first_str = first_str .. second_str,那么原來的first_str和second_str就會(huì)作為垃圾等待回收,first_str引用的是一個(gè)新的字符串,如果在程序里面有大量的字符串連接操作的話,性能會(huì)十分低下。Lua是一個(gè)很簡(jiǎn)潔的語言,他沒有StringBuffer的實(shí)現(xiàn),但是其實(shí)我們可以動(dòng)手寫一個(gè)簡(jiǎn)單的StringBuffer實(shí)現(xiàn),來避免性能的問題。
首先定義一個(gè)叫StringBuffer的table,使得這個(gè)StringBuffer被調(diào)用的時(shí)候看起來像是面向?qū)ο蟮臉幼?:)
然后分別定義兩個(gè)方法append和tostr,實(shí)現(xiàn)的原理就是:append用table來保存所有字符串,tostr把保存了字符串的table用concat轉(zhuǎn)成真正的字符串。
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
調(diào)用的時(shí)候大概如下,摘錄了一段代碼。。。
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中實(shí)現(xiàn)這樣的一個(gè)StringBuffer,既可以避免潛在的性能問題,又可以使得代碼看起來更加易懂~好了,重構(gòu)以前的代碼去了。。。
相關(guān)文章
Lua教程(一):簡(jiǎn)介、優(yōu)勢(shì)和應(yīng)用場(chǎng)景介紹
這篇文章主要介紹了Lua教程(一):簡(jiǎn)介、優(yōu)勢(shì)和應(yīng)用場(chǎng)景介紹,本文是Lua教程系列文章的第一篇,需要的朋友可以參考下2015-04-04
舉例簡(jiǎn)介L(zhǎng)ua中函數(shù)的基本用法
這篇文章主要介紹了舉例簡(jiǎn)介L(zhǎng)ua中函數(shù)的基本用法,--兩個(gè)橫線開始單行的注釋,--[[加上兩個(gè)[和]表示多行的注釋--]],需要的朋友可以參考下2015-07-07
Lua中關(guān)于元方法的一些知識(shí)點(diǎn)小結(jié)
這篇文章主要介紹了Lua中關(guān)于元方法的一些知識(shí)點(diǎn)小結(jié),本文講解了兩個(gè)具有不同元表的值進(jìn)行算術(shù)操作、關(guān)系類的元方法、保護(hù)元表,需要的朋友可以參考下2014-09-09
Lua中創(chuàng)建全局變量的小技巧(禁止未預(yù)期的全局變量)
這篇文章主要介紹了Lua中創(chuàng)建全局變量的小技巧(禁止未預(yù)期的全局變量),使用本文方法可以實(shí)現(xiàn)避免創(chuàng)建全局變量,在必須使用全局變量的情況下也給出了實(shí)現(xiàn)技巧,需要的朋友可以參考下2014-12-12
Lua極簡(jiǎn)入門指南(三): loadfile和錯(cuò)誤處理
這篇文章主要介紹了Lua極簡(jiǎn)入門指南(三): loadfile和錯(cuò)誤處理以及追蹤錯(cuò)誤等內(nèi)容,需要的朋友可以參考下2014-10-10

