您也可以使用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