このマニュアルは既にメンテナンスが終了したバージョンの Ruby を対象としています。 最新版のマニュアルへ

Ruby 3.1 リファレンスマニュアル

class ObjectSpace::WeakMap

[edit]

要約

GC の対象になるオブジェクトへの weak reference を持つクラスです。主に WeakRef クラスの内部で使用されるため、weakref ライブラリ経由で使用してください。

目次

インスタンスメソッド

インスタンスメソッド

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?

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
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) -> bool
member?(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#[]

inspect -> StringRuby 2.0.0 から[permalink][rdoc][edit]

self の情報を人間に読みやすい文字列にして返します。

各エントリは 参照元 => 参照先 の形式で出力されます。IntegerSymbol・ 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