これらの参照が弱く、いつでもガベージ コレクションされる可能性があることを除いて、C が参照システムを使用するのと同じ方法で Lua 5.2 のオブジェクトを参照する方法はありますか? 言い換えれば、オブジェクトの参照カウントに影響を与えない、現在のすべての Lua オブジェクトのレジストリはありますか?
質問する
579 次
1 に答える
7
これを行うには、1 レベルの間接化を導入します。値をレジストリに直接保存して強制的に弱くするのではなく、次のようにします。
- テーブルを作成する
- メタテーブルを設定して弱くする
{__mode = "v"}
- 既知の一意のキーを使用して、このテーブルをレジストリに保存します
- 追跡するすべてのオブジェクトをこのテーブルに保持します
- レジストリ自体ではなく、レジストリに保存されているこのテーブルを使用して、すべてのオブジェクトを検索します
Plutoのような強力な永続性を使用しない限り、「すべての Lua オブジェクトの追跡」( Ruby のObjectSpaceなど) はないことに注意してください。自分で保存/追跡するオブジェクトにのみアクセスできます。
于 2012-08-08T08:01:48.730 に答える