1

弱いテーブルとは何かを理解しています。
しかし、弱いテーブルが実際に使用できる場所を知りたいですか?

ドキュメントは言う

弱いテーブルは、値を変更せずに注釈を付けたい場合によく使用されます。

わかりません。どういう意味ですか?

4

2 に答える 2

2

コメントからの回答として投稿...

Lua は何をガベージと見なすかを知らないため、ガベージであると確信できないものは収集しません。状況によっては (その 1 つがデバッグである可能性があります)、Lua によって「ゴミではない」と見なされることなく、変数の値を指定したい場合があります。私の理解では、弱いテーブルを使用すると、変数/オブジェクト/などで通常行うことを実行できますが、それらが弱い参照されている (または弱いテーブル内にある) 場合でも、Lua によってガベージと見なされ、ガベージ コレクション関数が呼び出されます。

例:連想配列を使用し、キーと値のペアを 2 つの個別のプライベート テーブルに格納する場合について考えてみましょう。キー テーブルを 1 つの特定の用途にのみ使用したい場合は、使用が完了すると、Lua で存在するようにロックされます。ただし、弱いテーブルを使用すると、使い終わったらすぐにガベージとして収集でき、使用していたリソースを解放できます。

注釈に関する不可解な一文を説明すると、変数を「変更」すると、変数が存在するようにロックされ、Lua はそれを不要なものと見なしなくなります。変数に「注釈を付ける」とは、変数に名前、数値、またはその他の値を与えることを意味します。つまり、変数をロックせずに変数に名前/値を与えることが許可されていることを意味します (そのため、Lua はそれをガベージ コレクションできます)。

翻訳:

Weak tables are often used in situations where you wish to give a name to a value without locking the value into existence, which takes up memory.

于 2012-06-04T18:21:30.650 に答える
2

通常、オブジェクトへの参照を格納すると、オブジェクトがスコープ外になったときにそのオブジェクトが回収されるのを防ぐことができます。弱参照はガベージ コレクションを妨げません。

于 2012-06-04T18:05:58.953 に答える