Hi. 2017-02-21 9:44 GMT+01:00 Guillermo Polito <guillermopol...@gmail.com>:
> Hi Dr. Dias, > > a WeakValueDictionary get's its values collected if they are not > referenced strongly. However, the association remains there. This means > that when you do: > > dictionary := WeakValueDictionary with: 'hello' -> nil copy. > > You'll have something like this: > > WeakValueDictionary { > WeakValueAssociation { key: 'hello', value: yourObject } > } > > Once you garbage collect, the value is holding yourObject weakly, so > you'll have: > > WeakValueDictionary { > WeakValueAssociation { key: 'hello', value: nil } > } > > But the WeakValueAssociation will still be there. > > For me what you describe is implementation details and users should not think about it at all. I agree ifAbsent~ messages should work with collected values by "absent branch". It is intuitive. To support it correctly we can use approach of Set which uses #asSetElement to store items. Then we can easily distinguish nil from absent value. Real nil value will happen only by garbage collection. But I am wondering WeakSet not uses SetElement approach directly and instead it uses special flag object. Maybe it should be fixed too.