私のメインコルーチンでは、ユーザーの操作に応じてテーブルからエントリを削除または追加しています。バックグラウンドで、テーブルのエントリを繰り返し処理したいと思います。ある反復で挿入を見逃しても、次の反復の前にそれをキャッチできれば、特に気にしません。
それを繰り返して安全pairs
ですか?または、next
代わりに使用する必要がありますか?
テーブルのトラバース中にエントリを安全に削除できますが、新しいエントリ、つまり新しいキーを作成することはできません。ただし、既存のエントリの値を変更することはできます。(エントリの削除は、そのルールの特殊なケースです。)
ここからは行けません。少なくとも直接ではない...
lhfが言ったように、テーブルのトラバース中にエントリを変更または削除することはできますが、追加することはできません。結果は...未定義です。(読む:すべての実用的な目的のためにハイパースペースまたは同等のものに分岐します。)
エントリを追加できるようにする場合は、テーブルのクローンを作成し、1つのコピーを反復に使用し、もう1つのコピーを挿入と削除の追跡に使用する必要があります。これ自体が要件に一致しない場合は、代わりに次のようなことを行う必要があります。
採用できるルールがわずかに異なる他の同様のパターンがあります。たとえば、手順5と6の間に、マージなどの前に、追加されたテーブルエントリのテーブルウォーキングコードへの再帰呼び出しを挿入したい場合があります。メインテーブルと追加テーブルの両方で削除の可能性を追跡する必要がある場合もあります。それが可能な相互作用である場合。