Lua非常有用的工具——递归打印表数据
摘要: Lua是一种非常小巧的语言。虽小,但五脏俱全。 在Lua中,我认为最最核心的数据结构就是表。表不仅可用作数组,还可以用作字典。Lua面向对象的实现也是用表实现的。 表对于Lua实在是太重要了!所以,在开发与调试过程中,让表可视化是非常迫切的需求。
local function _list_table(tb, table_list, level)
local ret = ""
local indent = string.rep(" ", level*4)
for k, v in pairs(tb) do
local quo = type(k) == "string" and "\"" or ""
ret = ret .. indent .. "[" .. quo .. tostring(k) .. quo .. "] = "
if type(v) == "table" then
local t_name = table_list[v]
if t_name then
ret = ret .. tostring(v) .. " -- > [\"" .. t_name .. "\"]\n"
else
table_list[v] = tostring(k)
ret = ret .. "{\n"
ret = ret .. _list_table(v, table_list, level+1)
ret = ret .. indent .. "}\n"
end
elseif type(v) == "string" then
ret = ret .. "\"" .. tostring(v) .. "\"\n"
else
ret = ret .. tostring(v) .. "\n"
end
end
local mt = getmetatable(tb)
if mt then
ret = ret .. "\n"
local t_name = table_list[mt]
ret = ret .. indent .. "<metatable> = "
if t_name then
ret = ret .. tostring(mt) .. " -- > [\"" .. t_name .. "\"]\n"
else
ret = ret .. "{\n"
ret = ret .. _list_table(mt, table_list, level+1)
ret = ret .. indent .. "}\n"
end
end
return ret
end
-------------------------------------------------------------------
-- Public functions
-------------------------------------------------------------------
function table_tostring(tb)
if type(tb) ~= "table" then
error("Sorry, it's not table, it is " .. type(tb) .. ".")
end
local ret = " = {\n"
local table_list = {}
table_list[tb] = "root table"
ret = ret .. _list_table(tb, table_list, 1)
ret = ret .. "}"
return ret
end
function table_print(tb)
print(tostring(tb) .. table_tostring(tb))
end
-------------------------------------------------------------------
-- For test
-------------------------------------------------------------------
local test_table_2 = {
print,
}
local test_table_1 = {
12, 22.5, true,
info = {
name = "Jack", age = 26,
lifeexp = {
["1986"] = "Both",
["2013"] = "Work in Tencent",
["2015"] = "Get married"
},
wife = "Lucy"
},
"Hello test",
recu_table = test_table_2,
["2"] = 13
}
test_table_2.recu_table = test_table_1
local metatable = {
__index = test_table_2,
__add = function(a, b) return 0 end
}
setmetatable(test_table_1, metatable)
function table_lib_test()
table_print(test_table_1)
end
来源:python脚本自动迁移
Lua非常有用的工具——递归打印表数据的更多相关文章
- 递归打印lua中的table
在lua中,table是比较常用的数据形式,有时候为了打印出里面的内容,需要做一些特殊处理. 废话不多讲,直接粘代码: print = release_print -- 递归打印table local ...
- Underscore.js 常用类型判断以及一些有用的工具方法
1. 常用类型判断以及一些有用的工具方法 underscore.js 中一些 JavaScript 常用类型检查方法,以及一些工具类的判断方法. 首先我们先来谈一谈数组类型的判断.先贴出我自己封装好的 ...
- 【跟着子迟品 underscore】常用类型判断以及一些有用的工具方法
Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...
- lintcode:递归打印数字
题目 用递归打印数字 用递归的方法找到从1到最大的N位整数. 样例 给出 N = 1, 返回[1,2,3,4,5,6,7,8,9]. 给出 N = 2, 返回[1,2,3,4,5,6,7,8,9,10 ...
- python打印表格式数据,留出正确的空格和段落星号或注释
python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...
- plsql 工具怎样导出 oracle 表数据
一.双击 plsql 工具,输入登陆用户.登陆密码以及登陆数据库名称,如下图: 二.菜单 Tools --> Export Tables...,如下图: 三.进入导出界面后,可以选择单个表,进行 ...
- UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)
题目描写叙述: 定义合法的括号序列例如以下: 1 空序列是一个合法的序列 2 假设S是合法的序列.则(S)和[S]也是合法的序列 3 假设A和B是合法的序列.则AB也是合法的序列 比如:以下的都是合法 ...
- 使用递归打印二叉树的左视图 java
使用递归打印二叉树的左视图 java package com.li.jinRiTouTiao; public class PrintLeftView { static class TreeNode{ ...
- LintCode-371.用递归打印数字
用递归打印数字 用递归的方法找到从1到最大的N位整数. 注意事项 用下面这种方式去递归其实很容易: recursion(i) { if i > largest number: return re ...
随机推荐
- Elasticsearch(二)--集群原理及优化
一.ES原理 1.索引结构ES是面向文档的 各种文本内容以文档的形式存储到ES中,文档可以是一封邮件.一条日志,或者一个网页的内容.一般使用 JSON 作为文档的序列化格式,文档可以有很多字段,在创建 ...
- 【C#】C#中使用GDAL3(三):Windows下编译插件驱动
转载请注明原文地址:https://www.cnblogs.com/litou/p/15720236.html 本文为<C#中使用GDAL3>的第三篇,总目录地址:https://www. ...
- 牛掰,在IDEA中,你可以安装小傅哥写的插件了!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.承认你优秀很难 很多码农,把路走窄了 捧一个,喷一个,很多码农都不会多一点思路看问题,总是 ...
- python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法
类对象.类属性与实例对象.实例属性的区别 在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性.类属性在内存中只有一份,在__init__外部定义. 通过类创建的对象称为实 ...
- Java带包结构调用命令行运行编译
原文: https://www.toutiao.com/i6491809562037846542/ 带包结构调用命令行运行编译. 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 分 ...
- Hive UDF,就这
摘要:Hive UDF是什么?有什么用?怎么用?什么原理?本文从UDF使用入手,简要介绍相关源码,UDF从零开始. 本文分享自华为云社区<Hive UDF,就这>,作者:汤忒撒. Hive ...
- Vulnhub系列:Tomato(文件包含getshell)
这个靶机挺有意思,它是通过文件包含漏洞进行的getshell,主要姿势是将含有一句话木马的内容记录到ssh的登录日志中,然后利用文件包含漏洞进行包含,从而拿到shell 0x01 靶机信息 靶机:To ...
- warmup(HCTF 2018)
为啥想写这道题的wp呢,因为这道题就是照着phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)复现出来的 题目 查看源码很容易找到source.php,直接访问 分析 题 ...
- 【Java常用类】Instant:瞬时
Instant:瞬时 时间线上的一个瞬时点. 这可能被用来记录应用程序中的事件时间戳,该类型是面向机器的. now():获取本初子午线对应的标准时间 Instant instant = Instant ...
- 《剑指offer》面试题47. 礼物的最大价值
问题描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘及 ...