在 Lua 中有8种基本数据类型:nil , boolean , number , string , user data , function , thread , table
数据类型 |
描述 |
nil |
表示一个无效值 |
boolean |
包含两个值:false 和 true |
number |
实数 |
string |
字符串 -- 由一对双引号或单引号表示 |
function |
由 C 或者 Lua 编写的函数 |
userdata |
表示任意储存在变量中的 C 数据结构 |
thread |
表示执行的独立线路,用于执行协同程序 |
table |
可以理解为数组,数组的索引可以是数字或者是字符串。 例如: local tab = {} 即创建了一个空表 |
认识完,这几种基本类型就开始这篇博客的中心思想,目的就是在垒码过程中对数据进行输出:
function showPrintInfo(...)
-- body
local stringcat = ""
for k, v in ipairs({...}) do
local subString = ""
if type(v) == "boolean" then
subString = (v == true and "true" or "false")
elseif type(v) == "number" or type(v) == "string" then
subString = tostring(v)
elseif type(v) == "table" then
printTable(v)
else
subString = "<数据是" .. type(v) .. "类型, 未处理类型>"
end
stringcat = stringcat .. " " .. subString
end
print(stringcat)
end
这里其他的类型都容易输出,基本上是直接打印就可以了,关键是对 table 的输出,这里我们需要用到递归的思想:
-- tab 需要输出的 table 的对象
-- level 表的深度(可不填,直接从最外层遍历)
-- key 该深度下表的索引(可不填,直接从 1 开始遍历)
function printTable(tab, level, key)
-- body
level = level or 1
local indent = ""
for i = 1, level do
indent = indent .. " "
end
print(indent .. "{")
key = ""
for k, v in pairs(tab) do
if type(v) == "table" then
key = k
printTable(v, level + 1, key)
else
local content
if type(v) == "string" then
if k ~= #tab then
content = string.format(indent .. " " .. "\"%s\",", tostring(v))
else
content = string.format(indent .. " " .. "\"%s\"", tostring(v))
end
print(content)
else
if k ~= #tab then
content = string.format(indent .. " " .. "%s,", tostring(v))
else
content = string.format(indent .. " " .. "%s", tostring(v))
end
print(content)
end
end
end
print(indent .. "}")
end
测试代码:
local tab = { {"Jack", "Lucy", "John"}, {18, 20, 19}, {"CHINA", "USA", "UK"} }
showPrintInfo(true, 123, tab)
输出结果:
![](https://img-blog.csdn.net/20170929162248908?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGllZmVpZmVpMzE2OTQ4NzE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)