この第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. | ![]() |