Вы также можете использовать функцию 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
>
Обновление: К сожалению, как напоминает мне Александр Гладыш, функция 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 до нескольких постоянных библиотек данных.Лично мне нравится функция pl.pretty.write()
, предоставляемая библиотекой Стива Донавана .