--串行化:
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