要約
GC の対象になるオブジェクトへの weak reference を持つクラスです。 WeakRef クラスの内部で使用されているほか、ObjectSpace?._id2ref が deprecated になった Ruby 4.0 以降では、オブジェクト ID からオブジェクトを引く用途(Object#object_id をキーとしてオブジェクトを保持しておく方法) の代替としても案内されています。詳しくは ObjectSpace?._id2ref を参照してください。
キーだけを弱参照にし、値は強参照で保持するものとして ObjectSpace::WeakKeyMap があります。このクラスと違い、キーは同一性ではなく等値性で比較されます。
目次
- インスタンスメソッド
インスタンスメソッド
self[key] -> object | nilRuby 2.0.0 から[permalink][rdoc][edit]-
引数 key で指定されたオブジェクトが参照するオブジェクトを返します。
参照先のオブジェクトが存在しない場合、GC されている場合、対象外のオブジェクトを参照している場合に nil を返します。
- [PARAM]
key: - 参照元のオブジェクトを指定します。
判定はオブジェクトの同一性(Object#equal?)によって行われます。
例weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" p weak_map[key] # => "test" p weak_map["text"] # => nil (内容は同じでも別オブジェクトなので nil)[SEE_ALSO] ObjectSpace::WeakMap#[]=, ObjectSpace::WeakMap#key?
- [PARAM]
self[key] = valueRuby 2.0.0 から[permalink][rdoc][edit]-
引数 key から引数 value への参照を作成します。
- [PARAM]
key: - 参照元のオブジェクトを指定します。
- [PARAM]
value: - 参照先のオブジェクトを指定します。
weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" # => test p weak_map[key] # => test - [PARAM]
delete(key) -> object | nilRuby 3.3 から[permalink][rdoc][edit]delete(key) {|key| ... } -> object-
引数 key に対応するエントリを取り除きます。
- [PARAM]
key: - 取り除くエントリの参照元のオブジェクトを指定します。
- [RETURN]
- 取り除かれたエントリの参照先のオブジェクトを返します。 key に対応するエントリが存在しない場合は nil を返します。
ブロックを指定した場合、key に対応するエントリが存在しない時に限りブロックが評価され、その結果を返します。key に対応するエントリが存在する場合、ブロックは評価されません。
例weak_map = ObjectSpace::WeakMap.new key = "foo" weak_map[key] = "test" p weak_map.delete(key) # => "test" p weak_map[key] # => nil p weak_map.delete(key) # => nil p weak_map.delete("bar") { |k| "#{k} not found" } # => "bar not found"[SEE_ALSO] ObjectSpace::WeakMap#[]=
- [PARAM]
each {|key, value| ... } -> selfRuby 2.1.0 から[permalink][rdoc][edit]each_pair {|key, value| ... } -> self-
保持しているエントリの参照元オブジェクトと参照先オブジェクトを引数としてブロックを評価します。
GC によって参照先が回収されたエントリは反復の対象になりません。反復の順序は不定です。
Hash など他の反復可能なクラスと異なり、ブロックを省略しても Enumerator は返しません。エントリが1つ以上ある状態でブロックを指定せずに呼び出すと LocalJumpError が発生します。
each_pair は each のエイリアスです。
例weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" weak_map.each { |k, v| p [k, v] } # => ["text", "test"][SEE_ALSO] ObjectSpace::WeakMap#each_key, ObjectSpace::WeakMap#each_value
each_key {|key| ... } -> selfRuby 2.1.0 から[permalink][rdoc][edit]-
保持しているエントリの参照元オブジェクトを引数としてブロックを評価します。
GC によって参照先が回収されたエントリは反復の対象になりません。反復の順序は不定です。
Hash など他の反復可能なクラスと異なり、ブロックを省略しても Enumerator は返しません。エントリが1つ以上ある状態でブロックを指定せずに呼び出すと LocalJumpError が発生します。
例weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" weak_map.each_key { |k| p k } # => "text"[SEE_ALSO] ObjectSpace::WeakMap#each, ObjectSpace::WeakMap#each_value
each_value {|value| ... } -> selfRuby 2.1.0 から[permalink][rdoc][edit]-
保持しているエントリの参照先オブジェクトを引数としてブロックを評価します。
GC によって参照先が回収されたエントリは反復の対象になりません。反復の順序は不定です。
Hash など他の反復可能なクラスと異なり、ブロックを省略しても Enumerator は返しません。エントリが1つ以上ある状態でブロックを指定せずに呼び出すと LocalJumpError が発生します。
例weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" weak_map.each_value { |v| p v } # => "test"[SEE_ALSO] ObjectSpace::WeakMap#each, ObjectSpace::WeakMap#each_key
key?(key) -> boolRuby 2.1.0 から[permalink][rdoc][edit]include?(key) -> boolmember?(key) -> bool-
引数 key を参照元とするエントリを保持している場合に true を返します。
判定はオブジェクトの同一性(Object#equal?)によって行われます。 == や eql? による判定は行われないため、内容が等しくても別オブジェクトであれば false になります。
- [PARAM]
key: - 探索するオブジェクトを指定します。
weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" p weak_map.key?(key) # => true p weak_map.include?(key) # => true p weak_map.member?(key) # => true p weak_map.key?("text") # => false (内容は同じでも別オブジェクトなので false)[SEE_ALSO] ObjectSpace::WeakMap#[]
- [PARAM]
inspect -> StringRuby 2.0.0 から[permalink][rdoc][edit]-
self の情報を人間に読みやすい文字列にして返します。
各エントリは
例参照元 => 参照先の形式で出力されます。Integer・Symbol・ true・false・nil などの immediate な値はそれ自身を Object#inspect した結果が使われますが、それ以外のオブジェクトは to_s や inspect を呼び出さずに#<クラス名:0xアドレス>の形式で表示されます。weak_map = ObjectSpace::WeakMap.new weak_map[:key] = 1 p weak_map.inspect # => "#<ObjectSpace::WeakMap:0x00007f5b6c0a5d20: :key => 1>" keys -> [object]Ruby 2.1.0 から[permalink][rdoc][edit]-
保持しているエントリの参照元オブジェクトからなる配列を返します。
GC によって参照先が回収されたエントリのキーは含まれません。返される配列の要素の順序は不定です。
例weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" p weak_map.keys # => ["text"][SEE_ALSO] ObjectSpace::WeakMap#values
size -> IntegerRuby 2.1.0 から[permalink][rdoc][edit]length -> Integer-
保持しているエントリの数を返します。GC によって回収されたエントリは数えません。
例weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" p weak_map.size # => 1 p weak_map.length # => 1 values -> [object]Ruby 2.1.0 から[permalink][rdoc][edit]-
保持しているエントリの参照先オブジェクトからなる配列を返します。
GC によって回収されたエントリの値は含まれません。返される配列の要素の順序は不定です。
例weak_map = ObjectSpace::WeakMap.new key = "text" weak_map[key] = "test" p weak_map.values # => ["test"][SEE_ALSO] ObjectSpace::WeakMap#keys