1

メソッドとインデックス演算子 (整数インデックスを使用) の両方をサポートするには、ユーザーデータ オブジェクトが必要です。関数を介してメソッドをシミュレートせずに、共通のメタテーブルでこれを達成する方法はありますか?

metatable(object).__index実際のメソッドを含むテーブルとmetatable(metatable(object).__index).__index、インデックス演算子を実装する関数に設定することにより、メタテーブルをチェーンしてみました。ただし、その関数は__index、元のオブジェクトではなく、最初のテーブルを引数として呼び出されます。メタメソッドが関数の場合、元のオブジェクトを渡す方がはるかに理にかなっているから__indexです。とにかく、__index関数内のメソッド名を明示的にチェックせずに、私が望むものを達成する方法はありますか?

4

2 に答える 2

1

テーブルに設定__indexすると、Lua はテーブル内のキーに対して通常のテーブル ルックアップを自動的に行い__indexます。と完全に同等で、テーブルに独自のテーブルがある場合debug.getmetatable(obj).__index[k]は、再帰的な__indexルックアップまたは関数呼び出しを行います。__index__index

于 2014-05-03T20:38:22.647 に答える