27. Lua 串行化( Serialization )

-- "varname=<exp>"

--varname = "]] .. os.execute(' rm I*) .. [["

function serialize(o)
	if type(o) == "number" then
		io.write(o)
	elseif type(0) == "string" then
		-- io.write( "'" , o , "'" )
		io.write( "[[" , o , "]]" )
	end
end

-- 得到 varname = "[[]] .. os.execute(' rm I*) .. [[]]"


--1 用 format( "%q" , s ) 解决上面存在的问题
a  = 'a "rblematic" \\string'
print( string.format("%q",a)) --得到结果 "a \"rblematic\" \\string"


--2 [===[ string ]===] 注意:两端等号数量相等 , 等号数量要比字符串中的连续等号大
print([===[ [[]] .. os.==execute(' rm I*) .. [[]] ]===])


function quote(str)
	-- 查找最长的等号序列
	local n = -1
	for w in string.gmatch( str , "]=*") do  -- ]=* 这是正则表达式
		n = match.max(n,#w-1)
	end

	-- 产生 n + 1 个等号
	local eq = string.rep( "=" , n + 1 )
	-- 生成长字符串的字面表示
	return string.format(" [%s[\n%s]%s] ", eq , str , eq )
end

print( "quote : " , quote(a) )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值