学习目标:
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。
以下为创建自定义模块 mod.lua,文件代码格式如下:
-- 文件名为 mod.lua
-- 定义一个名为 mod 的模块
-- lua模块
print("CC ————————————> 01")
--模块
mod = {}
--变量
mod.vodid = "906192"
--函数
--属性、普通方法、匿名函数
mod.GetVodId = function()
return mod.vodid
end
--构造函数
function mod:New(o)
local t = o or {}
setmetatable(t,{__index = self})
return t
end
--全局方法
function Show()
print("调用Show方法")
end
function mod.SetVodId(id)
print("调用SetVodId方法",id)
mod.vodid = id
end
--私有方法
local function Tables()
return type(mod)
end
--测试
print("执行",Tables())
--~ m = mod
--~ print("GetVodId",m.GetVodId())
--~ m.SetVodId(123456)
--~ print("SetVodId",m.GetVodId())
--~ c = mod:New({cpid = 233})
--~ print("tab",c.GetVodId())
--~ print("cpid",c.cpid)
--返回
return mod
以下代码为写在其他 xxx.lua中,调用上述模块功能:
--调用mod
require "mod"
print("CC ————————————> 01")
c = mod:New({cpid = 233})
print("cpid",c.cpid)
print("GetVodId",c.GetVodId())
c.SetVodId(111)
print("GetVodId",c.GetVodId())
Show()
local m = require "mod"
print("CC ————————————> 02")
print("mod",m)
print("vodid",m.vodid)
m.SetVodId(123)
id = m.GetVodId()
print("GetVodId",id)
Show()
--调用结果
--[[
CC ————————————> 01
执行 table
CC ————————————> 01
cpid 233
GetVodId 906192
调用SetVodId方法 111
GetVodId 111
调用Show方法
CC ————————————> 02
mod table: 0087B838
vodid 111
调用SetVodId方法 123
GetVodId 123
调用Show方法
--]]