< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(スレッド移動)
N :次の記事(スレッド移動)
|<:前のスレッド
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
Issue #16035 has been updated by matz (Yukihiro Matsumoto).
I think this is the required behavior for `WeakMap` to implement a cache for example. Accepted.
Matz.
----------------------------------------
Feature #16035: Allow non-finalizable objects such as Integer, static Symbol etc in ObjectSpace::WeakMap
https://bugs.ruby-lang.org/issues/16035#change-81249
* Author: byroot (Jean Boussier)
* Status: Assigned
* Priority: Normal
* Assignee: nobu (Nobuyoshi Nakada)
* Target version:
----------------------------------------
This goes one step farther than what @nobu did in https://bugs.ruby-lang.org/issues/13498
With this patch, special objects such as static symbols, integers, etc can be used as either key or values inside WeakMap. They simply don't have a finalizer defined on them.
This is useful if you need to deduplicate value objects, e.g. some minimal use case:
```ruby
class Money
REGISTRY = ObjectSpace::WeakMap.new
private_constant :REGISTRY
def self.new(amount)
REGISTRY[amount] ||= super.freeze
end
def initialize(amount)
@amount = amount
end
end
if Money.new(42).eql?(Money.new(42))
puts "Same instance"
else
puts "Different instances"
end
```
This is a very simple example, but more complex examples can create use a dynamically created symbol as deduplication key, etc.
It also removes one weirdness introduced in the mentioned patch:
```ruby
wmap = ObjectSpace::WeakMap.new
wmap["foo".to_sym] = Object.new # works fine with dynamic symbols
wmap[:bar] = Object.new # cannot define finalizer for Symbol (ArgumentError)
```
Proposed patch: https://github.com/ruby/ruby/pull/2313
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>