--串行化: 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
时间: 2024-10-05 23:52:50