您也可以使用table.foreach(t,f)
功能。它遍历一个表t
,用每个键和值对调用函数f
。与print
用来得到一个快速查看:
table.foreach(_G,print)
这是在交互提示非常方便的,因为它是相当简洁,很容易的输入。
C:\Users\Ross>lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> table.foreach(_G,print)
string table: 005CE3D0
xpcall function: 00717E80
package table: 005CE088
tostring function: 00717DE0
print function: 00711CB8
os table: 005CE358
unpack function: 00717E40
require function: 00718360
getfenv function: 00711B58
setmetatable function: 00717DA0
next function: 00711C38
assert function: 00711A38
tonumber function: 00717DC0
io table: 005CE218
rawequal function: 00711CF8
collectgarbage function: 00711A78
getmetatable function: 00711B98
module function: 00718320
rawset function: 00711D58
math table: 005CE448
debug table: 005CE498
pcall function: 00711C78
table table: 005CE128
newproxy function: 00711E10
type function: 00717E00
coroutine table: 005CDFE8
_G table: 00713EC8
select function: 00711D98
gcinfo function: 00711B18
pairs function: 00711F98
rawget function: 00711D18
loadstring function: 00711C18
ipairs function: 00711F68
_VERSION Lua 5.1
dofile function: 00711A98
setfenv function: 00717D60
load function: 00711BD8
error function: 00711AD8
loadfile function: 00711BB8
>
更新:不幸的是,亚历山大Gladysh让我想起,在table.foreach
功能已被废弃在Lua 5.1和5.2的最新测试版本的快速检查表明,它已经在Lua 5.2被删除。这是很容易写的pairs
方面同一个循环:
for k,v in pairs(_G) do print(k,v) end
应该给相同的输出table.foreach(_G,print)
会。我在此倾向的关键特征是定义了print
,以便在您传递的每个参数上调用tostring()
,并且tostring()
被定义为为每种类型的值返回某种合理的字符串,即使那些类似函数没有作为一个字符串的良好表示。详细信息在每个平台上都会有所不同,但tostring()
的缺省实现在其字符串结果中包含表或函数的地址,从而使您至少可以识别_G.os和_G.io是不同的表。
对于更加人性化的表格打印,有很多解决方案,从PiL中的示例到多个持久数据库。我个人喜欢steve donavan's penlight库提供的pl.pretty.write()
函数。
另请参阅http://www.lua.org/cgi-bin/demo?globals – lhf
你知道,传统的做法是标出接受解决方案的人的答案。 – Puppy