3

これらの参照が弱く、いつでもガベージ コレクションされる可能性があることを除いて、C が参照システムを使用するのと同じ方法で Lua 5.2 のオブジェクトを参照する方法はありますか? 言い換えれば、オブジェクトの参照カウントに影響を与えない、現在のすべての Lua オブジェクトのレジストリはありますか?

4

1 に答える 1

7

これを行うには、1 レベルの間接化を導入します。値をレジストリに直接保存して強制的に弱くするのではなく、次のようにします。

  1. テーブルを作成する
  2. メタテーブルを設定して弱くする{__mode = "v"}
  3. 既知の一意のキーを使用して、このテーブルをレジストリに保存します
  4. 追跡するすべてのオブジェクトをこのテーブルに保持します
  5. レジストリ自体ではなく、レジストリに保存されているこのテーブルを使用して、すべてのオブジェクトを検索します

Plutoのような強力な永続性を使用しない限り、「すべての Lua オブジェクトの追跡」( Ruby のObjectSpaceなど) はないことに注意してください。自分で保存/追跡するオブジェクトにのみアクセスできます。

于 2012-08-08T08:01:48.730 に答える