Lua 笔记--串行化、require和模板

--串行化:
function serialize(o)	
	if type(o) == "number" then
		io.write(o)
	elseif type(o) == "string" then
		io.write(string.format("%q", o))
	elseif type(o) == "table" then
		io.write("{\n")
		for k,v in pairs(o) do
			io.write(" ", k, " = ")
			serialize(v)
			io.write(",\n")
		end
		io.write("}\n")
	else
	end
end
serialize(2)
print("\n")
serialize("Jacedy")
print("\n")
serialize({i = 2, s = "ok"})

--输出:
2
"Jacedy"
{
 i = 2,
 s = "ok",
}


        require的使用:

--[[
require("test1")        --test1 ==> test1.lua
showname("Jacedy")      --showname() 为test1.lua 中的一个函数,加载后可直接使用
]]

local m = require("test1")
m.showname("Jacedy")

--按路径加载
require("app.test.test1")        --app/test/test1.lua

加载过程:

1、判断这个包是否存在

2、判断包是否加载

3、如果没有返回nil 或者报错

4、反之则返回相应的模块对象


        模块(module)的编写方法:

--test1.lua

complex = {}

function complex.showname()        --表示showname属于complex
    print("Jacedy")
end

return complex

--test2.lua

local t = require("test1")
t.showname()                    -->Jacedy


 

--编写模板的基本方法

--方法一:

local M = {}
complex = M --模块名
M.i = {r=0, i=1}
function M.new( r, i )
return {r=r, i=i}
end
function M.add( c1, c2 )
return M.new(c1.r + c2.r, c1.i + c2.i)
end
return M


--方法二:(优化)

local modname = ...
local M = {}
_G[modname] = M 
package.loaded[modname] = M 
--经过这样的修改,若需要重命名一个模板,只需重命名并定义它的文件就可以了
--通过这样的赋值,就不需要在模板结尾返回M了
M.i = {r=0, i=1}
function M.new( r, i )
return {r=r, i=i}
end
function M.add( c1, c2 )
return M.new(c1.r + c2.r, c1.i + c2.i)
end

上一篇:Git学习笔记五--分支管理


下一篇:结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程