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' 之外,在实际项目中,我们还经常'重载元表中的'以下两个'元方法 metamethod'
另一个'元方法'则是'__call',它类似于'仿函数',可以让 table '被调用'
⑨ OOM object-oriented
强调:Lua '不是'一个'面向对象 Object Orientation'的语言,但可以使用'metatable'来实现
补充:'不推荐'用 Lua 的 table 来'模拟实现继承'等这种'复杂'的功能,'可读性'太差
困惑:在'调用类方法'的时候,为什么是': 冒号'而不是'. 点号'呢?
观察:如何'用元表'来模拟'面向对象'?
lua-resty-mysql '模拟OO',个人理解是便于'复用mysql连接',无需'反复开启'mysql连接
⑩ Q&A
1) 一个是'代码复用'和'代码缓存'原因,'性能'可以提高;
2) 另外一个是'可读性高',便于'维护'