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 ( )