在 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 中进行任何认真的开发至关重要,并且了解这些表格的内容通常对于调试至关重要。希望此便捷函数能帮助您完成开发过程!