博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua 笔记--串行化、require和模板
阅读量:7082 次
发布时间:2019-06-28

本文共 1415 字,大约阅读时间需要 4 分钟。

  hot3.png

--串行化: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	endendserialize(2)print("\n")serialize("Jacedy")print("\n")serialize({i = 2, s = "ok"})--输出:2"Jacedy"{ i = 2, s = "ok",}

        require的使用:

--[[require("test1")        --test1 ==> test1.luashowname("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.luacomplex = {}function complex.showname()        --表示showname属于complex    print("Jacedy")endreturn complex

--test2.lualocal 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}endfunction M.add( c1, c2 )return M.new(c1.r + c2.r, c1.i + c2.i)endreturn 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}endfunction M.add( c1, c2 )return M.new(c1.r + c2.r, c1.i + c2.i)end

转载于:https://my.oschina.net/Jacedy/blog/362062

你可能感兴趣的文章