Openresty原理概念篇(十二) 剖析Lua唯一的数据结构table和metatable特性

一  剖析Lua唯一的数据结构table和metatable特性

备注: 和之前在'Lua 专栏'中理解的'table'和'metatable'做'对比'理解

补充:  本文是编写'module'的基础

①  引入

接下来先来看'标准 table 库函数',Lua 5.1 中自带的 table 库函数'并不多',我们先大概浏览一遍

②  table.getn 获取元素个数

③  table.remove 删除指定元素

④   table.concat 元素拼接函数

⑤  table.insert 插入一个元素

⑥  LuaJIT 的 table 扩展函数

1) LuaJIT 在'标准 Lua' 的基础上,扩展了'两个'很有用的 table 函数

2) 分别用来'新建 new'和'清空 clear'一个 table

table.new 扩展文档

2) table.clear() '清空 table'

⑦  OpenResty 的 table 扩展函数

openresty新增的几个API

⑧  元表

overreload  --> 'Java的重载'

我们接着就来看下'元表 metatable'具体有什么'用处'

__tostring

除了 '__tostring' 之外,在实际项目中,我们还经常'重载元表中的'以下两个'元方法 metamethod'

  

另一个'元方法'则是'__call',它类似于'仿函数',可以让 table '被调用'

元方法 

⑨  OOM面向对象

强调:Lua '不是'一个'面向对象 Object Orientation'的语言,但可以使用'metatable'来实现

补充:'不推荐'用 Lua 的 table 来'模拟实现继承'等这种'复杂'的功能,'可读性'太差

lua-resty-mysql案例 

困惑:在'调用类方法'的时候,为什么是': 冒号'而不是'. 点号'呢?

观察:如何'用元表'来模拟'面向对象'?

lua-resty-mysql '模拟OO',个人理解是便于'复用mysql连接',无需'反复开启'mysql连接

⑩  答疑解惑

1) 一个是'代码复用'和'代码缓存'原因,'性能'可以提高;

2) 另外一个是'可读性高',便于'维护'

猜你喜欢

转载自blog.csdn.net/wzj_110/article/details/131364885