【Ruby3.x】ObjectSpace::WeakMap::values()メソッドの使い方
valuesメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
valuesメソッドは、ObjectSpace::WeakMapに保持されている全ての値を取得するメソッドです。ObjectSpace::WeakMapは、キーと値のペアを格納するハッシュのようなデータ構造ですが、その最大の特徴はキーに対する「弱い参照」を持つ点にあります。これは、キーとなるオブジェクトが、そのWeakMap以外のどこからも参照されなくなり、ガベージコレクション(GC)によってメモリから解放されると、対応するキーと値のペアもWeakMapから自動的に削除される仕組みです。
このvaluesメソッドは引数を取りません。メソッドが呼び出された時点で、WeakMap内にまだガベージコレクションによって削除されずに残っている有効な値のみを収集し、それらを新しい配列として返します。したがって、すでにガベージコレクションによって回収されたキーと対応する値は、このメソッドが返す配列には含まれません。
返される配列には、WeakMap内の値がどのような順序で格納されるかは保証されません。また、このメソッドを呼び出した後も、ガベージコレクションは非同期に実行され続けるため、WeakMapの内容は動的に変化する可能性があります。現在WeakMapがどのオブジェクトを値として保持しているかを確認したい場合や、WeakMapに格納されているオブジェクトに対して一括で操作を行いたい場合などに、このvaluesメソッドが利用できます。
構文(syntax)
1require 'objspace' 2 3# WeakMapインスタンスを作成 4weak_map = ObjectSpace::WeakMap.new 5 6# キーと値を設定 7key1 = Object.new 8key2 = Object.new 9weak_map[key1] = "value_a" 10weak_map[key2] = "value_b" 11weak_map[Object.new] = "value_c" 12 13# WeakMap内のすべての値の配列を取得 14all_values = weak_map.values 15 16# all_values は ["value_a", "value_b", "value_c"] のような配列になる 17puts all_values.inspect
引数(parameters)
引数なし
引数はありません
戻り値(return)
Array
ObjectSpace::WeakMapクラスのvaluesメソッドは、WeakMapに格納されている全ての値を配列として返します。