lua对模块接口扩展的一种方法
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对模块接口扩展的一种方法相关推荐
- python播放音频及playsound模块解除占用的3种方法
python播放音频文件及playsound模块解除占用的3种方法 pip install playsound 播放mp3文件 from playsound import playsound impo ...
- 关系型数据库横向扩展的三种方法
本文是 Oracle Coherence 3.5一书,第一章: Achieving Performance, Scalability, and Availability Objectives,第二节: ...
- python 文本处理模块_Python文本处理几种方法
Python文本处理几种方法 方法一:readline函数#-*- coding: UTF-8 -*- f = open("D:\pythontest\splm_ugslmd.log&quo ...
- 调用接口常用的几种方法
我们在使用String转jsonObject的时候通常使用这两种方法 net.sf.json.JSONObject bodyData = net.sf.json.JSONObject.fromObje ...
- Python使用模块中对象的几种方法
Python默认安装仅包含部分基本或核心模块,启动时也仅加载了基本模块,在需要时再显式地加载(有些模块可能需要先安装)其他模块,这样可以减小程序运行的压力,且具有很强的可扩展性.Python中导入模块 ...
- 解决接口慢的几种方法
哪些问题会引起接口性能问题? 这个问题的答案非常多,需要根据自己的业务场景具体分析.这里做一个不完全的总结: 数据库慢查询 深度分页问题 未加索引 索引失效 join过多 子查询过多 in中的值太多 ...
- 接口优化的11种方法
接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题. 该问题说简单也简单,说复杂也复杂. 有时候,只需加个索引就能解决问题. 有时候,需要做代码重构. 有时 ...
- Centos+PHP模块+exif扩展 (第三方模块)
今日应开发需求,想要显示图片的属性信息,于是度娘就告知exif模块可以实现,操作步骤与问题总结吐下: php安装扩展的几种方法 注意 与Apache+PHP或者Nginx+PHP的运行模式不同,Wor ...
- dwr框架查看外放方法_硬核!教你三种方法,实现微信自定义修改地区!
前几天,有小伙伴问怎样自定义修改微信地区?当时说的第二天分享,结果在录制第二种方法的时候,突发意外,出现"微信以停止运行"的状况,明明早上还好好的,怎么就打不开了呢?也木有做任何操 ...
最新文章
- bzero, memset ,setmem 区别
- Android下实现数据绑定功能
- Centos 7 查看内存占用情况相关命令
- 转载:Linux kernel SPI驱动解释
- 如何将文件拷贝服务器上,如何将文件复制到云服务器上
- 服务器能进系统滴滴响,ibm x226服务器开机嘀嘀嘀响三遍就没反应了。是怎么回事?内存吗?...
- 2021年qs世界大学计算机科学排名,2015年QS世界大学计算机专业排名
- MapReduce计算模型(二)
- 【计算机网络】信源编码——香农三大定理
- yaahp使用教程_结合层次分析法和模糊综合评价法的评价方法-利用yaahp
- python统计(二)假设检验
- python xls文件转为csv
- GNU GRUB 2.02系统启动项管理设置
- 不会编程,别着急!免编程工具助你快速开发App
- 收藏随身查,光纤光缆60条必备知识!
- 判断当前音效是否播放完毕
- 【Practical】蒙特卡罗法及其应用
- 12月DB-Engines数据库排名,你猜谁会是第一?
- 股票自选股基本函数大全-3
- 推荐系统学习(二)--UserCF与ItemCF推荐算法