试图打印_G不起作用。
2011-8-25 13:0:18
收藏:0
阅读:140
评论:4
根据文档,\_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
错误:
_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
原文链接 https://stackoverflow.com/questions/7190794
点赞
stackoverflow用户444060
为了继续像 DeadMG 一样,将你的
print("G["..k.."]=".._G[k])
改成
print("G["..k.."]=",_G[k])
你就可以了。
2011-08-25 13:17:03
stackoverflow用户796584
以下是使用DeadMG的解决方案的最终代码:
function f(x)
return 2*x
end
a=3
b="hello world"
print("_G has "..#_G.." elements")
for k,v in pairs(_G) do
if k~="_G" then
if type(v)=="string" or type(v)=="number" then
print("G["..k.."]="..v)
else
print("G["..k.."]=("..type(v)..")")
end
end
end
2011-08-25 13:19:52
stackoverflow用户68204
你也可以使用 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
>
更新:不幸的是,正如 Alexander Gladysh 所提醒的,table.foreach
函数已经在 Lua 5.1 中被弃用,在 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 的 penlight 提供的 pl.pretty.write()
函数。
2011-08-26 02:08:24
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你的代码完全按照预期工作 - 它循环遍历 _G 并尝试打印内容。不幸的是,_G 包含许多无法连接成字符串的表格。代码失败是因为 _G["_G"] = _G。这意味着当解释器来到
print("G["..k.."]=".._G[k])
那么 k 就是 "_G",_G[k] 是 _G,你尝试连接一个表 - 解释器无法这样做,因此它会在你的代码中崩溃。_G 中有许多其他表格也会导致这种失败。