标签:
-- complex.lua-- 模块实际上是一个表complex = {}-- 定义模块函数function complex.add(c1,c2) ... end-- 调用模块内部的函数,需要complex.前缀function complex.callAdd(c1,c2)complex.add(c1,c2)end-- 之前的声明把所有函数都放入complex表中了,最后返回这个表return complex
-- main.lualocal complex = require("complex")complex.add(x,y)
-- complex.lua-- 模块实际上是一个表,这里从require的参数(...)获取模块名称local modName = ...-- 模块的内部名称Mlocal M = {}-- lua的全局变量默认存储地方为_G, _G[modName] = M 等价于定义一个名字为modName的全局变量_G[modName] = M-- require函数当一个函数无返回值的时候,会返回package.loaded[模块名]的值-- 于是这样写就可以省去最后的return语句了package.loaded[modName] = M-- setfenv是lua版本的using namespace M,这样写就可以避免每次都加M.前缀了-- 为了能够访问其他全局变量,把M的元表的__index字段设为_G,这样不在M表的函数和变量就会到_G表查找setmetatable(M, {__index = _G})setfenv(1,M)-- 定义模块函数,注意,模块名称被省略function add(c1,c2) ... end-- 调用模块内部的函数,需要complex.前缀function callAdd(c1,c2)add(c1,c2)end-- 不用返回这个表-- return M
-- complex.lua-- module等价于上述一大段函数, package.seeall让这个模块可以访问_G中的变量-- 如果只调用mudule(...)就不能访问module(..., package.seeall)-- 定义模块函数,注意,模块名称被省略function add(c1,c2) ... end-- 调用模块内部的函数,需要complex.前缀function callAdd(c1,c2)add(c1,c2)end-- 不用返回这个表-- return M
标签:
原文地址:http://www.cnblogs.com/dydx/p/4311519.html