module

lua中模块的实现,对于使用者来说就是一个库,引用此库后,可以调用库中实现的任意函数。

使用库,可以将一类功能相关的接口做封装,并提供开放接口。

参考:

http://blog.codingnow.com/2006/02/lua_51_module.html

module 重载需求

我们实现引用程序,往往要引用若干已经实现的库文件, 这些库大都是开源的,以此来加快应用开发进程

应用库后, 应用编码中, 会引用库的一些API, 例如会是 lfs 库中的 dir 来list目录下的文件和文件夹。

---

但是在应用维护过程中,我们往往希望给库的API添加一些过滤规则, 或者对部分API进行重载,

如此,我们对库的使用和应用的维护,提出如下两点要求:

1、 不修改库的代码, 因为后续可能会有升级库的需要, 如果修改, 后续升级库, 往往会丢掉库的修改, 即使记录库的修改, 待升级库时候, 再将修改同步到新库中, 也是耗时, 容易出错的。

2、 应用代码直接使用库的 API 名称, 因为开发人员往往利用库的document, 可以迅速了解API的含义, 利于利用库进行快速开发,而对库的API添加的过滤规则,对应用代码是透明的。

module 重载方法

库引用后, 为库添加属性(old), 记录原始API函数, 然后对原始API名称新定义 函数, 函数中调用 old属性记录的函数,

这样就可以再 调用old属性记录的函数之前, 做一些过滤规则, 例如对函数入参做 合法性判断,添加安全判断条件。

给出例子:

文件 moduleA.lua 中, 定义了一个 printA 模块, 模块实现了一个 printTest 接口

--------------- moduleA.lua -----------------
local print = print
module ("printA")
function printTest()print("module in printA print")
end

重载脚本, 引用 moduleA.lua

重载 printTest 接口, 打印测试, 先原始接口打印, 再执行重载接口中打印。

require "moduleA"printA.printTest_old = printA.printTestprintA.printTest = function ()printA.printTest_old()print("printTest of printA module is reimplement")
endprintA.printTest()

打印:

module in printA print
printTest of printA module is reimplement
>Exit code: 0

lua对模块接口扩展的一种方法相关推荐

  1. python播放音频及playsound模块解除占用的3种方法

    python播放音频文件及playsound模块解除占用的3种方法 pip install playsound 播放mp3文件 from playsound import playsound impo ...

  2. 关系型数据库横向扩展的三种方法

    本文是 Oracle Coherence 3.5一书,第一章: Achieving Performance, Scalability, and Availability Objectives,第二节: ...

  3. python 文本处理模块_Python文本处理几种方法

    Python文本处理几种方法 方法一:readline函数#-*- coding: UTF-8 -*- f = open("D:\pythontest\splm_ugslmd.log&quo ...

  4. 调用接口常用的几种方法

    我们在使用String转jsonObject的时候通常使用这两种方法 net.sf.json.JSONObject bodyData = net.sf.json.JSONObject.fromObje ...

  5. Python使用模块中对象的几种方法

    Python默认安装仅包含部分基本或核心模块,启动时也仅加载了基本模块,在需要时再显式地加载(有些模块可能需要先安装)其他模块,这样可以减小程序运行的压力,且具有很强的可扩展性.Python中导入模块 ...

  6. 解决接口慢的几种方法

    哪些问题会引起接口性能问题? 这个问题的答案非常多,需要根据自己的业务场景具体分析.这里做一个不完全的总结: 数据库慢查询 深度分页问题 未加索引 索引失效 join过多 子查询过多 in中的值太多 ...

  7. 接口优化的11种方法

    接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题. 该问题说简单也简单,说复杂也复杂. 有时候,只需加个索引就能解决问题. 有时候,需要做代码重构. 有时 ...

  8. Centos+PHP模块+exif扩展 (第三方模块)

    今日应开发需求,想要显示图片的属性信息,于是度娘就告知exif模块可以实现,操作步骤与问题总结吐下: php安装扩展的几种方法 注意 与Apache+PHP或者Nginx+PHP的运行模式不同,Wor ...

  9. dwr框架查看外放方法_硬核!教你三种方法,实现微信自定义修改地区!

    前几天,有小伙伴问怎样自定义修改微信地区?当时说的第二天分享,结果在录制第二种方法的时候,突发意外,出现"微信以停止运行"的状况,明明早上还好好的,怎么就打不开了呢?也木有做任何操 ...

最新文章

  1. bzero, memset ,setmem 区别
  2. Android下实现数据绑定功能
  3. Centos 7 查看内存占用情况相关命令
  4. 转载:Linux kernel SPI驱动解释
  5. 如何将文件拷贝服务器上,如何将文件复制到云服务器上
  6. 服务器能进系统滴滴响,ibm x226服务器开机嘀嘀嘀响三遍就没反应了。是怎么回事?内存吗?...
  7. 2021年qs世界大学计算机科学排名,2015年QS世界大学计算机专业排名
  8. MapReduce计算模型(二)
  9. 【计算机网络】信源编码——香农三大定理
  10. yaahp使用教程_结合层次分析法和模糊综合评价法的评价方法-利用yaahp
  11. python统计(二)假设检验
  12. python xls文件转为csv
  13. GNU GRUB 2.02系统启动项管理设置
  14. 不会编程,别着急!免编程工具助你快速开发App
  15. 收藏随身查,光纤光缆60条必备知识!
  16. 判断当前音效是否播放完毕
  17. 【Practical】蒙特卡罗法及其应用
  18. 12月DB-Engines数据库排名,你猜谁会是第一?
  19. 股票自选股基本函数大全-3
  20. 推荐系统学习(二)--UserCF与ItemCF推荐算法

热门文章

  1. Edge好用么?几条你不知道的Edge小技巧
  2. mysql数据库导出导入设置编码
  3. MYSQL 5.1自动安装脚本
  4. 简单的根据parentId生成树
  5. Java二、八、十、十六进制介绍
  6. Oracle数据库用法汇总
  7. linux 限额系统,Linux磁盘限额(quota)
  8. 描写计算机老师上课的神态,请你用一段话描写一位老师上课的情景,注意抓住神态语言动作等细节...
  9. java分页插件PageHelper的内置list数据操作失败
  10. 【CentOS 7笔记5】,主机互相登陆#