【Ruby3.x】ObjectSpace::WeakMap::each()メソッドの使い方
eachメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
eachメソッドは、ObjectSpace::WeakMapに格納されたキーと値のペアを順に処理を実行するメソッドです。
ObjectSpace::WeakMapは、キーと値への「弱い参照」を持つ特殊なデータ構造です。これは、通常のハッシュとは異なり、キーや値として設定されたオブジェクトが他の場所から一切参照されなくなった際に、ガベージコレクションによって自動的にメモリから解放されると同時に、WeakMapからも自動的に削除されるという特徴を持ちます。これにより、不要になったオブジェクトがWeakMap内に残り続けることを防ぎ、メモリの効率的な管理を助けます。
このeachメソッドを使用すると、WeakMapに現在格納されているすべてのキーと値のペアに対して、指定された処理を一つずつ実行できます。具体的には、{|key, value| ... }という形式で記述される「ブロック」をメソッドに渡すことで、そのブロックが各ペア(キーと値)を受け取り、それぞれのペアに対してブロック内の処理が順次実行されます。
すべてのペアの処理が完了すると、eachメソッドは元のWeakMapオブジェクト自身を返します。もしブロックを渡さずにeachメソッドを呼び出した場合は、繰り返し処理を行うための特別なオブジェクトであるEnumeratorを返します。これにより、他のイテレータメソッドと組み合わせて、より柔軟なデータ操作を行うことが可能です。WeakMap内のすべての要素に対して何らかの操作を行いたい場合や、内容を確認したい場合に非常に役立つメソッドです。
構文(syntax)
1require 'objspace' 2 3weak_map = ObjectSpace::WeakMap.new 4weak_map[:key1] = "value1" 5weak_map[:key2] = "value2" 6 7weak_map.each do |key, value| 8end
引数(parameters)
引数なし
引数はありません
戻り値(return)
self または Enumerator
each メソッドは、ObjectSpace::WeakMap オブジェクト自身 (self)、またはブロックが与えられなかった場合は Enumerator オブジェクトを返します。