Openresty Principles and Concepts (12) Analyzing Lua’s unique data structure table and metatable features

An   analysis of Lua’s unique data structure table and metatable features

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

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

①Introduction  _

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

②   table.getn gets the number of elements

③   table.remove deletes the specified element

④    table.concat element splicing function

⑤   table.insert inserts an element

⑥   LuaJIT ’s table extension function

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

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

table.new extension documentation

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

⑦   OpenResty’s table extension function

Several new APIs added to openresty

⑧  meta table

overreload  --> 'Java的重载'

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

__tostring

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

  

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

meta method 

⑨  OOM object-oriented

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

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

lua-resty-mysql case 

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

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

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

⑩  Q&A

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

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

Guess you like

Origin blog.csdn.net/wzj_110/article/details/131364885