この第1 版は Lua 5.0 向けに記述されています。最新バージョンでもほとんどが依然として関連していますが、差異があります。
第4 版は Lua 5.3 を対象としており、Amazon で、また他の書店で購入できます。
書籍を購入することで、Lua プロジェクトをサポートすることもできます。
![]() |
Lua でのプログラミングLua | ![]() |
| 第 II 部テーブルとオブジェクト 第 13 章 メタテーブルとメタメソッド |
通常、Lua のテーブルの操作は予測可能なセットです。キーと値のペアを追加したり、キーに関連付けられた値を確認したり、すべてのキーと値のペアを走査したりできますが、それだけです。テーブルを追加することもテーブルを比較することもテーブルを呼び出すこともできません.
メタテーブルはテーブルの動作を変更できます。たとえば、メタテーブルを使用すると、a と b がテーブルであるとき、Lua が式 a+b を計算する方法を定義できます。Lua がテーブルを 2 つ追加しようとするたびに、いずれかがメタテーブルを持っているかどうかと、そのメタテーブルに __add フィールドがあるかどうかをチェックします。Lua がこのフィールドを見つけた場合、その対応する値(メタメソッドと呼ばれ、関数の必要があります)を呼び出して合計を計算します。
Lua の各テーブルは独自のメタテーブルを持つ場合があります。(後ほど説明するように、ユーザーデータにもメタテーブルを持たせることができます。)Lua は常にメタテーブルのない新しいテーブルを作成します。
t = {}
print(getmetatable(t)) --> nil
setmetatableを使用して任意のテーブルのメタテーブルを設定または変更できます。 t1 = {}
setmetatable(t, t1)
assert(getmetatable(t) == t1)
任意のテーブルを他のテーブルのメタテーブルにすることができます。関連のあるテーブルのグループは、一般的なメタテーブル(それらの一般的な動作を記述したもの)を共有できます。テーブルは独自にメタテーブルを持つことができます(それによってその独自の個別的動作が記述されます)。すべての構成が有効です。| 著作権 © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |