编写一个模块的最简单方法:

  1. -- complex.lua
  2. -- 模块实际上是一个表
  3. complex = {}
  4. -- 定义模块函数
  5. function complex.add(c1,c2) ... end
  6. -- 调用模块内部的函数,需要complex.前缀
  7. function complex.callAdd(c1,c2)
  8. complex.add(c1,c2)
  9. end
  10. -- 之前的声明把所有函数都放入complex表中了,最后返回这个表
  11. return complex


调用这个模块时:
  1. -- main.lua
  2. local complex = require("complex")
  3. complex.add(x,y)

上述代码有几点麻烦:
1.在模块内部,一个函数调用另一个函数时,必须加上complex前缀
2.最后必须返回complex这个表

改进的办法:
  1. -- complex.lua
  2. -- 模块实际上是一个表,这里从require的参数(...)获取模块名称
  3. local modName = ...
  4. -- 模块的内部名称M
  5. local M = {}
  6. -- lua的全局变量默认存储地方为_G, _G[modName] = M 等价于定义一个名字为modName的全局变量
  7. _G[modName] = M
  8. -- require函数当一个函数无返回值的时候,会返回package.loaded[模块名]的值
  9. -- 于是这样写就可以省去最后的return语句了
  10. package.loaded[modName] = M
  11. -- setfenv是lua版本的using namespace M,这样写就可以避免每次都加M.前缀了
  12. -- 为了能够访问其他全局变量,把M的元表的__index字段设为_G,这样不在M表的函数和变量就会到_G表查找
  13. setmetatable(M, {__index = _G})
  14. setfenv(1,M)
  15. -- 定义模块函数,注意,模块名称被省略
  16. function add(c1,c2) ... end
  17. -- 调用模块内部的函数,需要complex.前缀
  18. function callAdd(c1,c2)
  19. add(c1,c2)
  20. end
  21. -- 不用返回这个表
  22. -- return M

上述的代码好麻烦,lua5.1提供了一个函数,完成等价功能,只需要这样写:
  1. -- complex.lua
  2. -- module等价于上述一大段函数, package.seeall让这个模块可以访问_G中的变量
  3. -- 如果只调用mudule(...)就不能访问
  4. module(..., package.seeall)
  5. -- 定义模块函数,注意,模块名称被省略
  6. function add(c1,c2) ... end
  7. -- 调用模块内部的函数,需要complex.前缀
  8. function callAdd(c1,c2)
  9. add(c1,c2)
  10. end
  11. -- 不用返回这个表
  12. -- return M


lua 模块与环境的更多相关文章

  1. 【Lua】Debian环境下openresty的安装

    OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器,它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. OpenResty 通 ...

  2. 在cocos code ide的基础上构建自己的lua开发调试环境

    对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...

  3. lua 模块

    lua 模块 概述 lua 模块类似于封装库 将相应功能封装为一个模块, 可以按照面向对象中的类定义去理解和使用 使用 模块文件示例程序 mod = {} mod.constant = "模 ...

  4. nginx 增加 lua模块

    Nginx中的stub_status模块主要用于查看Nginx的一些状态信息. 本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定: ./configure –wi ...

  5. 安装Nginx+Lua+OpenResty开发环境配置全过程实例

    安装Nginx+Lua+OpenResty开发环境配置全过程实例 OpenResty由Nginx核心加很多第三方模块组成,默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用. ...

  6. 使用openresty + lua 搭建api 网关(一)安装openresty ,并添加lua模块

    openresty 有点不多说,网上各种介绍,先安装吧. 官方操作在此,http://openresty.org/cn/installation.html, tar -xzvf openresty-V ...

  7. Step By Step(Lua模块与包)

    Step By Step(Lua模块与包) 从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块.从使用者的角度来看,一个模块就是一个程序库,可以通过requi ...

  8. Nginx使用Lua模块实现WAF

    前言:最近一段时间在写加密数据功能,对安全相关知识还是缺少积累,无意间接触到了WAF相关知识,刚好Nginx可以实现WAF功能,也简单学习了Lua这门语言,分享下 一.WAF产生的背景 过去企业通常会 ...

  9. 【转载】cocos2d-x教程 Mac系统下搭建Lua的编码环境

    原文链接:http://blog.csdn.net/u012945598/article/details/17168831   在使用Lua写脚本的时候大家都会因为没有代码提示导致敲代码的效率有所下降 ...

随机推荐

  1. gridView获得每行的值

    前台代码: <asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...

  2. objective-c系列-动态类型和动态绑定

    /* 静态类型: 变量的类型在编译之时就被确定下来. 动态类型: 对象的类型由对象的内存里的某个结构数据来决定它是什么类型, 而不是在编译之时就被确定下来的数据类型. 对象的类型只有在运行时才知道. ...

  3. UIButton、UILabel、UITextField 初学者需要了解的基本定义和常用设置

     以下是三个IOS开发中最常用的控件,作为IOS基础学习教程知识 ,初学者需要了解其基本定义和常用设置,以便在开发在熟练运用. UIButton按钮 第一.UIButton的定义 UIButton * ...

  4. IntentService源码分析

    和HandlerThread一样,IntentService也是Android替我们封装的一个Helper类,用来简化开发流程的.接下来分析源码的时候 你就明白是怎么回事了.IntentService ...

  5. Java 往年试卷参考答案!!!

    仅供参考: 第一题: E C E A D D C A C A C A B A B C C D B C 第二题: True True False 11 12 13 14 No such file fou ...

  6. Getting Started with ASP.NET Web API 2 (C#)

    By Mike Wasson|last updated May 28, 2015 7556 of 8454 people found this helpful Print   Download Com ...

  7. Visual studio 2013安装

    最头疼装一些需要安装插件的软件,刚开始下载了VS2013的一个版本,安装到一半就发现还得装一些必要插件,然后得重新删了再安装,倒弄了还几次才装好.这是第一次安装时是出现的情况. 第二次尝试安装,把所有 ...

  8. ORACLE中伪表 dual 的用法

     dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 sel ...

  9. 操作linux命令

    一.Linux下重启Tomcat 1. 进入tomcat下的bin目录:cd /user/standard/tomcat/bin; 使用关闭命令:./shutdown.sh; 查看Java进程是否关闭 ...

  10. Nginx中文手册

    Nginx 常见应用技术指南[Nginx Tips] 第二版 作者:NetSeek http://www.linuxtone.org (IT运维专家网|集群架构|性能调优) 目 录 一. Nginx ...