博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua对模块接口扩展的一种方法
阅读量:7209 次
发布时间:2019-06-29

本文共 1191 字,大约阅读时间需要 3 分钟。

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 = printmodule ("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

 

转载地址:http://omrum.baihongyu.com/

你可能感兴趣的文章
LeetCode – Refresh – Binary Tree Zigzag Level Order Traversal
查看>>
python操作三大主流数据库(13)python操作redis之新闻项目实战①新闻数据的导入
查看>>
2013夏,iDempiere来了 - v1.0c Installers (Devina LTS Release) 2013-06-27
查看>>
每天一个linux命令(22):find 命令的参数详解
查看>>
然后是几点(15)
查看>>
15.节点属性
查看>>
ISO-8859-1编码
查看>>
PHP 代码评审的 10 个提示
查看>>
你知道吗?Web的26项基本概念和技术
查看>>
方案优化:网站实现扫描二维码关注微信公众号,自动登陆网站并获取其信息...
查看>>
Leetcode | Balanced Binary Tree
查看>>
sqlServer对内存的管理
查看>>
挑战密室
查看>>
利用Solr服务建立的站内搜索雏形---solr1
查看>>
5、jmeter-逻辑控制器介绍与使用
查看>>
如何遍历List对象
查看>>
2012年4月19日
查看>>
获取站点所有缓存,以及清除站点缓存
查看>>
oracle 是user_tables里面可以查找到一个表,而用DESC或者insert语句插入时就会报不存在视图。...
查看>>
找水王续
查看>>