1.实现一个简单的pairs
local tbl = {}
function GenerateData()
for i = 1,10 do
local value = math_random(1,100000)
tbl[value] = value
end
end
function selfPairs(tbl,key)
local function iterator(tbl,key)
return next(tbl,key)
end
return iterator,tbl,nil
end
GenerateData()
for k,v in selfPairs(tbl) do
printx(k,v)
end
function selfPairs2(tbl,key)
assert(type(tbl) == "table")
local newTbl = {}
for _,v in pairs(tbl) do
table.insert(newTbl,v)
end
table.sort(newTbl,function(a,b)
return a > b
end)
local function iterator(tbl,key)
return next(tbl,key)
end
return iterator,newTbl,nil
end
GenerateData()
for k,v in selfPairs2(tbl) do
printx(k,v)
end
2.实现对象的pairs
clsSelfDLinkObj = STRUCT.clsDLink:Inherit("clsSelfDLinkObj")
function clsSelfDLinkObj:pairs()
local function iterator(self,node)
if not node then
node = self.m_Header
else
node = node.Next
end
return node,node and node.Data
end
return iterator,self,nil
end
local TEST_COUNT = 5
function TestDLink()
local SelfDLinkObj = clsSelfDLinkObj:New()
clsSelfDLinkObj:OnCreate("EXREA_TEST")
for i= 1,TEST_COUNT do
SelfDLinkObj:Push(i)
end
for Node,Data in SelfDLinkObj:pairs() do
printx(Node,Data)
end
end
TestDLink()