lua程序设计(第四版)练习答案自做(第十五章)

文章目录

仓库

15.1

#!/usr/bin/lua
function basicSerialize(o)
	return string.format("%q",o)
end
function serialize(o,deep)
	local deep=deep or 0
	local t=type(o)
	if t=="boolean" or t=="number" or t=="string" or t=="nil" then
		io.write(string.format("%q",o))
	elseif t=="table" then
		io.write("{\n")
		for k,v in pairs(o) do
			io.write(string.rep("\t",deep+1),string.format(" [%s] = ",basicSerialize(k)))
			serialize(v,deep+1)
			io.write(",\n")
		end
		io.write(string.rep("\t",deep),"}\n")
	else
		error("cannot serialize a "..type(o))
	end
end

15.2

#!/usr/bin/lua
function basicSerialize(o)
	return string.format("%q",o)
end
function serialize(o,deep)
	local deep=deep or 0
	local t=type(o)
	if t=="boolean" or t=="number" or t=="string" or t=="nil" then
		io.write(string.format("%q",o))
	elseif t=="table" then
		io.write("{\n")
		for k,v in pairs(o) do
			io.write(string.rep("\t",deep+1),string.format(" [%s] = ",basicSerialize(k)))
			serialize(v,deep+1)
			io.write(",\n")
		end
		io.write(string.rep("\t",deep),"}\n")
	else
		error("cannot serialize a "..type(o))
	end
end

15.3

#!/usr/bin/lua
reserved={["and"]=true,["break"]=true,["do"]=true,["else"]=true,["elseif"]=true,["end"]=true,["false"]=true,["goto"]=true,["for"]=true,["function"]=true,["if"]=true,["in"]=true,["local"]=true,["nil"]=true,["not"]=true,["or"]=true,["repeat"]=true,["return"]=true,["then"]=true,["true"]=true,["until"]=true,["while"]=true}
function basicSerialize(o)
	return string.format("%q",o)
end
function serialize(o,deep)
	local deep=deep or 0
	local t=type(o)
	if t=="boolean" or t=="number" or t=="string" or t=="nil" then
		io.write(string.format("%q",o))
	elseif t=="table" then
		io.write("{\n")
		for k,v in pairs(o) do
			local s=string.match(k,"^[%a_]+[%w_]*$")
			if s and not reserved[s] then
				io.write(string.rep("\t",deep)," ",k," = ")
			else
				io.write(string.rep("\t",deep),string.format(" [%s] = ",basicSerialize(k)))
			end
			serialize(v,deep+1)
			io.write(",\n")
		end
		io.write(string.rep("\t",deep),"}\n")
	else
		error("cannot serialize a "..type(o))
	end
end

15.4

#!/usr/bin/lua
reserved={["and"]=true,["break"]=true,["do"]=true,["else"]=true,["elseif"]=true,["end"]=true,["false"]=true,["goto"]=true,["for"]=true,["function"]=true,["if"]=true,["in"]=true,["local"]=true,["nil"]=true,["not"]=true,["or"]=true,["repeat"]=true,["return"]=true,["then"]=true,["true"]=true,["until"]=true,["while"]=true}
function basicSerialize(o)
	return string.format("%q",o)
end
function serialize(o,deep)
	local array={}
	local deep=deep or 0
	local t=type(o)
	if t=="boolean" or t=="number" or t=="string" or t=="nil" then
		io.write(string.format("%q",o))
	elseif t=="table" then
		io.write("{\n")
		for k,v in pairs(o) do
			if type(k)=="number" then
				array[#array+1]=v
			else
				local s=string.match(k,"^[%a_]+[%w_]*$")
				if s and not reserved[s] then
					io.write(string.rep("\t",deep)," ",k," = ")
				else
					io.write(string.rep("\t",deep),string.format(" [%s] = ",basicSerialize(k)))
				end
				serialize(v,deep+1)
				io.write(",\n")
			end
		end
		for _,j in pairs(array) do
			io.write(string.rep("\t",deep),basicSerialize(j),",\n")
		end
		io.write(string.rep("\t",deep),"}\n")
	else
		error("cannot serialize a "..type(o))
	end
end

15.5

待完善

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值