関係のない love2d エンジンで lua コンソールを作成しました。メタテーブルをアップグレードして、より多くのことを実行できるようにしようとしています (ペア関数、ターゲット テーブルではなく別のテーブルのメタテーブルを変更するなど)。作成中のアドオンの 1 つは__changeindex
、既存のテーブルを変更するときのイベントです。索引。
これを行うには、値を保持しないダミーテーブルをユーザーに提供する必要があります。ユーザーが何かを追加しようとすると、それが実際のテーブルで既に定義されているかどうかを確認し、それが call である場合は call __changeindex
、そうでない場合は call __newindex
. これは完全に機能しますが、他の多くの Lua テーブル関数が機能しなくなります (for loops/getmetatable/setmetatable)。これらの問題のほとんどに対して回避策を作成しましたが、正常に機能しますが、#t 演算子を機能させることができません。
t1={1,2,3}
t2=setmetatable({},{__getn=function(self) return #t1 end})
そして #t2 は本当に #t1 を返すはずです。これを行う方法はありますか?
このための私の既存のコードはここにあります
編集:これは私の最初の投稿なので、投稿ルールに完全に従わなかった場合はお詫びします。試してみました:)また、誰かが偽のテーブルと実際のテーブルのガベージコレクションを作成する方法を持っている場合は、本当に感謝しています