在 Lua 中,您通常需要在表格中存储项目或引用,有时还需要知道此表格中存在哪些项目/成员。使用pairs()
函数,就能轻松实现此目的
local myTable = { firstName = "Fred", lastName = "Bob", phoneNumber = "(555) 555-1212", age = 30 } for k,v in pairs(myTable) do print( k,v ) end
此操作会向控制台输出以下内容
firstName Fred age 30 lastName Bob phoneNumber (555) 555-1212
请注意,顺序可能有所不同,因为 pairs()
函数不一定按
如果表格具有
local myTable = { firstName = "Fred", lastName = "Bob", phoneNumber = "(555) 555-1212", age = 30, favoriteSports = { "Baseball", "Hockey", "Soccer" }, favoriteTeams = { "Cowboys", "Panthers", "Lightning" } }
在这种情况下,pairs()
循环方法将输出类似以下内容
firstName Fred favoriteSports table: 0x7fb1bbd00750 phoneNumber (555) 555-1212 favoriteTeams table: 0x7fb1bbd00340 lastName Bob age 30
如您所见,循环将显示对这些表格的内部引用,例如 0x7fb1bbd00750
,但不会显示
幸运的是,我们可以使用强大的函数,它将智能地遍历表格和
local function printTable( t ) local printTable_cache = {} local function sub_printTable( t, indent ) if ( printTable_cache[tostring(t)] ) then print( indent .. "*" .. tostring(t) ) else printTable_cache[tostring(t)] = true if ( type( t ) == "table" ) then for pos,val in pairs( t ) do if ( type(val) == "table" ) then print( indent .. "[" .. pos .. "] => " .. tostring( t ).. " {" ) sub_printTable( val, indent .. string.rep( " ", string.len(pos)+8 ) ) print( indent .. string.rep( " ", string.len(pos)+6 ) .. "}" ) elseif ( type(val) == "string" ) then print( indent .. "[" .. pos .. '] => "' .. val .. '"' ) else print( indent .. "[" .. pos .. "] => " .. tostring(val) ) end end else print( indent..tostring(t) ) end end end if ( type(t) == "table" ) then print( tostring(t) .. " {" ) sub_printTable( t, " " ) print( "}" ) else sub_printTable( t, " " ) end end
此函数将遍历
printTable( myTable )
在这种情况下,输出变为
table: 0x600001260c00 { [firstName] => "Fred" [favoriteSports] => table: 0x600001260c00 { [1] => "Baseball" [2] => "Hockey" [3] => "Soccer" } [phoneNumber] => "(555) 555-1212" [favoriteTeams] => table: 0x600001260c00 { [1] => "Cowboys" [2] => "Panthers" [3] => "Lightning" } [lastName] => "Bob" [age] => 30 }
如您所见,此函数使表格内容变得更易读!此外,在适用时,它还显示[2] => "Hockey"
由于此函数用于输出表格内容,因此直接使用它可能不合直觉,例如
printTable( myTable )
因此,替代方法是将 printTable()
函数添加到 Lua table
库对象中,如下所示
table.print = printTable
然后,通过引用调用它会更加合理
table.print( myTable )
使用表格来存储项目和引用对于在 Lua 和 Corona 中进行任何认真的开发至关重要,并且了解这些表格的内容通常对于调试至关重要。希望此便捷函数能帮助您完成开发过程!