Openresty の原則と概念 (12) Lua の独自のデータ構造テーブルとメタテーブル機能の分析

Lua独自のデータ構造テーブルとメタテーブル機能の分析  

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

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

①はじめに  _

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

②   table.getn で要素数を取得

③   table.remove指定された要素を削除します

④    table.concat要素結合機能

⑤   table.insert要素挿入します

⑥   LuaJITのテーブル拡張機能

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

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

table.新しい拡張ドキュメント

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

⑦   OpenRestyのテーブル拡張機能

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