加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua利用自定义函数打印_G内容

发布时间:2020-12-14 21:55:32 所属栏目:大数据 来源:网络整理
导读:前言 前几天我自己定义了一个打印table的函数,并且把实现的细节都总结在了这里—— Lua 自定义打印table函数 ,自己定义的函数一定要找一个用武之地,于是我决定拿Lua的灵魂——_G表开刀,在输出的过程中还出现了一点点问题,因此总结下来和大家分享一下。

前言

前几天我自己定义了一个打印table的函数,并且把实现的细节都总结在了这里—— Lua 自定义打印table函数 ,自己定义的函数一定要找一个用武之地,于是我决定拿Lua的灵魂——_G表开刀,在输出的过程中还出现了一点点问题,因此总结下来和大家分享一下。

过程

首先我是知道_G有一个字段是_G,即_G._G =_G(怎么这么变态),于是我知道这样可能会导致死循环,于是在递归table之前先判断table的名字是否是_G,如果是就直接返回,就在我认为没问题的时候,灾难还是发生了。

我发现程序运行起来以后,一个CPU占用率瞬间到达100%,一开始我还没有在意,以为这个_G表太大了,于是等了一会儿,当我发现输出文件超过300M时果断懵逼了,这绝对是死循环了啊,一个表中的内容再多,也不至于多的这样离谱,于是我手动杀死了进程。

面对300M的文本文件没有什么可怕的,拿出我的法宝Sublime Text文本编辑器打开,我发现确实是死循环了,因为_G表中不仅仅有_G,还有一个package.loaded表,这个表就是环境中已经加载的内容,结果_G.package.loaded中还有_G.package.loaded就死循环了,当我把这种情况去掉以后就可以正常的输出结果了,其中的_G._G_G.package.loaded我只输出了空表,并不是实际的内容,其他都是正常内容。

结果

总结

  • 遇到实际的问题可以先猜一下原因,然后通过代码来证明你的猜想是否正确。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读