lua 自实现pairs
生活随笔
收集整理的這篇文章主要介紹了
lua 自实现pairs
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1.實現(xiàn)一個簡單的pairs
- 2.實現(xiàn)對象的pairs
1.實現(xiàn)一個簡單的pairs
local tbl = {} function GenerateData()--構(gòu)造一個哈希 tablefor i = 1,10 dolocal value = math_random(1,100000)tbl[value] = valueend end--自己實現(xiàn)的pairs function selfPairs(tbl,key)-- assert(tbl == "table")--迭代器函數(shù)local function iterator(tbl,key)return next(tbl,key)end--這里的tbl 會作為 迭代器的第一個參數(shù), nil會作為迭代器的第二個參數(shù) 以此類推return iterator,tbl,nil endGenerateData() for k,v in selfPairs(tbl) doprintx(k,v) end--自己實現(xiàn)的pairs 返回一個數(shù)組table function selfPairs2(tbl,key)assert(type(tbl) == "table")local newTbl = {}for _,v in pairs(tbl) dotable.insert(newTbl,v)endtable.sort(newTbl,function(a,b)return a > bend)--迭代器函數(shù)local function iterator(tbl,key)return next(tbl,key)end--這里的newTbl 會作為 迭代器的第一個參數(shù), nil會作為迭代器的第二個參數(shù) 以此類推return iterator,newTbl,nil endGenerateData()for k,v in selfPairs2(tbl) doprintx(k,v) end2.實現(xiàn)對象的pairs
--自己的雙向鏈表類 clsSelfDLinkObj = STRUCT.clsDLink:Inherit("clsSelfDLinkObj")--復(fù)寫pairs function clsSelfDLinkObj:pairs()local function iterator(self,node)--把條件運算符當(dāng)成三元運算符使用,可能造成死循環(huán)--注意:下面這么寫肯定會死循環(huán) 因為當(dāng)遍歷到鏈表的尾節(jié)點時, Next為nil, 此時 node 又等于 self.m_Header 陷入死循環(huán)--[[node = node and node.Next or self.m_Headerif node and node.Data thenreturn node, node.Dataend]]--修正 只要沒有環(huán)存在,就不會陷入死循環(huán)if not node thennode = self.m_Headerelsenode = node.Nextendreturn node,node and node.Dataend--這里的self 會作為 迭代器的第一個參數(shù), nil會作為迭代器的第二個參數(shù) 以此類推return iterator,self,nil endlocal TEST_COUNT = 5 function TestDLink()local SelfDLinkObj = clsSelfDLinkObj:New()clsSelfDLinkObj:OnCreate("EXREA_TEST")for i= 1,TEST_COUNT doSelfDLinkObj:Push(i)endfor Node,Data in SelfDLinkObj:pairs() doprintx(Node,Data)end end TestDLink()總結(jié)
以上是生活随笔為你收集整理的lua 自实现pairs的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 备份表、数据
- 下一篇: 耶格肺功能仪软件 - 弥散测试