根据文档 _G“拥有全球环境”。我想看看里面有什么,所以我写了下面的代码来打印_G,但是不起作用:
function f(x)
return 2*x
end
a=3
b="hello world"
print("_G has "..#_G.." elements")
for k,v in pairs(_G) do
print(k)
print(_G[k])
print("G["..k.."]=".._G[k])
end
Run Code Online (Sandbox Code Playgroud)
错误:
_G has 0 elements
a
3
G[a]=3
string
table: 003C8448
lua: try_G.lua:10: attempt to concatenate field '?' (a table value)
stack traceback:
try_G.lua:10: in main chunk
[C]: ?
>Exit code: 1
Run Code Online (Sandbox Code Playgroud)
您也可以使用该table.foreach(t,f)功能。它遍历一个表t,并f使用每个键和值对调用该函数。配合使用以print快速查看:
table.foreach(_G,print)
Run Code Online (Sandbox Code Playgroud)
这在交互式提示符下确实非常方便,因为它相当简洁且易于键入。
C:\ Users \ Ross> lua Lua 5.1.4版权所有(C)1994-2008 Lua.org,PUC-Rio > table.foreach(_G,print) 字符串表:005CE3D0 xpcall函数:00717E80 包装表:005CE088 字符串功能:00717DE0 打印功能:00711CB8 操作系统表:005CE358 开箱功能:00717E40 需要功能:00718360 getfenv函数:00711B58 可设置的功能:00717DA0 下一个功能:00711C38 断言功能:00711A38 tonumber函数:00717DC0 io表:005CE218 原始函数:00711CF8 垃圾回收功能:00711A78 可获取的功能:00711B98 模块功能:00718320 原始功能:00711D58 数学表:005CE448 调试表:005CE498 调用函数:00711C78 桌子桌子:005CE128 newproxy函数:00711E10 类型功能:00717E00 协程表:005CDFE8 _G表:00713EC8 选择功能:00711D98 gcinfo函数:00711B18 对函数:00711F98 rawget函数:00711D18 loadstring函数:00711C18 ipairs函数:00711F68 _VERSION Lua 5.1 dofile函数:00711A98 setfenv功能:00717D60 加载功能:00711BD8 错误功能:00711AD8 加载文件功能:00711BB8 >
更新:不幸的是,正如Alexander Gladysh提醒我的那样,该table.foreach功能在Lua 5.1中已被弃用,对当前5.2 Beta版的快速检查显示该功能已在Lua 5.2中删除。就以下方面而言,编写相同的循环很容易pairs:
for k,v in pairs(_G) do print(k,v) end
Run Code Online (Sandbox Code Playgroud)
它应该提供与输出相同的输出table.foreach(_G,print)。我要依靠的关键功能print是定义为调用tostring()您传递的每个参数,并tostring()定义为针对每种值返回某种合理的字符串,即使是那些没有很好表示的函数作为字符串。每个平台上的详细信息将有所不同,但是的默认实现tostring()在其字符串结果中包含表或函数的地址,从而使您至少可以认识到_G.os和_G.io是不同的表。
对于更人性化的表格打印,有很多解决方案,从PiL中的示例到几个持久性数据库。就个人而言,我喜欢史蒂夫·多纳万pl.pretty.write()(Steve Donavan)的penlight库提供的功能。