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

class ObjectSpace::WeakKeyMap

[edit]

要約

キーへの弱参照を持つ、キーと値の組を保持するクラスです。

キーは他から参照されなくなると GC の対象になり、そのときキーと値の組は map から取り除かれます。値への参照は強参照なので、map に入っている間は GC されません。

ObjectSpace::WeakMap との違いは以下の 3 点です。

map = ObjectSpace::WeakKeyMap.new
key = "name"
map[key] = 1

# キーは等値性で比較されるので、別のオブジェクトでも引ける
p map["name"] # => 1

key = nil
GC.start
# キーへの参照が無くなったので、キーと値の組が取り除かれる
p map["name"] # => nil

上の例の GC.start は説明のために書いたもので、いつでもこのとおりに GC されるとは限りません。

同じ値を表すオブジェクトを 1 つだけ保持しておきたい場合、たとえば軽量な値オブジェクトのキャッシュを実装する用途に向いています。 ObjectSpace::WeakKeyMap#getkey を参照してください。

目次

インスタンスメソッド

インスタンスメソッド

self[key] -> object | nilRuby 3.3 から[permalink][rdoc][edit]

key に対応する値を返します。

key に対応する組が無い場合は nil を返します。

[PARAM] key:
探すキーを指定します。等値性(Object#eql?)で比較されます。
map = ObjectSpace::WeakKeyMap.new
key = "name"
map[key] = 1

p map["name"] # => 1
p map["zzz"]  # => nil

[SEE_ALSO] ObjectSpace::WeakKeyMap#[]=, ObjectSpace::WeakKeyMap#getkey

self[key] = valueRuby 3.3 から[permalink][rdoc][edit]

key に対応する値として value を登録します。

key への参照は弱参照です。他から key を参照するものが無くなると、キーと値の組は GC によって取り除かれます。値そのものへの参照は強参照です。

key に対応する組が既にある場合は、値だけを置き換えます。

[PARAM] key:
キーを指定します。GC の対象になるオブジェクトだけを指定できます。
[PARAM] value:
値を指定します。
[EXCEPTION] ArgumentError:
GC の対象にならないオブジェクト(IntegerSymbol など)をキーに指定した場合に発生します。
map = ObjectSpace::WeakKeyMap.new
key = "name"
map[key] = 1
p map["name"] # => 1

map[key] = 2
p map["name"] # => 2

map[1] = 3 # ~> ArgumentError

[SEE_ALSO] ObjectSpace::WeakKeyMap#[]

clear -> selfRuby 3.3 から[permalink][rdoc][edit]

すべての組を取り除きます。self を返します。

map = ObjectSpace::WeakKeyMap.new
key = "name"
map[key] = 1

map.clear
p map["name"] # => nil
delete(key) -> object | nilRuby 3.3 から[permalink][rdoc][edit]
delete(key) {|key| ... } -> object

key に対応する組を取り除き、その値を返します。

key に対応する組が無い場合、ブロックを指定していなければ nil を返します。ブロックを指定していれば、key を引数としてブロックを実行し、その結果を返します。 key に対応する組がある場合、ブロックは実行されません。

[PARAM] key:
取り除く組のキーを指定します。
map = ObjectSpace::WeakKeyMap.new
key = "name"
map[key] = 1

p map.delete("name") # => 1
p map["name"]        # => nil

p map.delete("zzz")                   # => nil
p map.delete("zzz") { |k| "no #{k}" } # => "no zzz"
getkey(key) -> object | nilRuby 3.3 から[permalink][rdoc][edit]

key と等値なキーが登録されていれば、登録されているほうのオブジェクトを返します。無い場合は nil を返します。

同じ値を表すオブジェクトを 1 つにまとめる用途に使えます。

[PARAM] key:
探すキーを指定します。
value = { amount: 1, currency: "USD" }

cache = ObjectSpace::WeakKeyMap.new
cache[value] = true

# 等値な別のオブジェクトを渡しても、登録済みのオブジェクトが返る
copy = cache.getkey({ amount: 1, currency: "USD" })
p copy.equal?(value) # => true

[SEE_ALSO] ObjectSpace::WeakKeyMap#[]

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

self の情報を含む文字列を返します。

map = ObjectSpace::WeakKeyMap.new
key = "name"
map[key] = 1

p map.inspect # => "#<ObjectSpace::WeakKeyMap:0x00007f8f0a0b1234 size=1>"
key?(key) -> boolRuby 3.3 から[permalink][rdoc][edit]

key に対応する組があれば true を、無ければ false を返します。

[PARAM] key:
探すキーを指定します。
map = ObjectSpace::WeakKeyMap.new
key = "name"
map[key] = 1

p map.key?("name") # => true
p map.key?("zzz")  # => false