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

Lua 输出可变参数列表内容

发布时间:2020-12-14 21:53:03 所属栏目:大数据 来源:网络整理
导读:在 Lua 中有8种基本数据类型:nil,boolean,number,string,user data,function,thread,table? 数据类型 描述 nil 表示一个无效值 boolean 包含两个值:false 和 true number 实数 string 字符串 -- 由一对双引号或单引号表示 function 由 C 或者 Lua 编写的函

在 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)

输出结果:

(编辑:李大同)

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

    推荐文章
      热点阅读