[Newbies] Anomaly of disappearing element in Bag?
Levente Uzonyi
leves at elte.hu
Fri Jul 30 14:57:22 UTC 2010
On Fri, 30 Jul 2010, Vaidotas Didžbalis wrote:
> Hello,
>
> Item "disappears" in Bag after contents of the item changes. Item is
> container with equality and hash is overridden. Is this a Bug?
No it's not. Since the return value of AKContainer >> #hash and
AKContainer >> #= depend on 'value', they will change if you change the
'value'. Hashed collections assume that the hash and equality of the
contained objects don't change.
>
> bag:= Bag with: (val := AKContainer value: 'a').
> val value: 'b'.
> bag valuesAndCounts includesKey: val. "false in Trunk,"
>
> set:= Set with: (val := AKContainer value: 'a').
> val value: 'b'.
> set includes: val. "true"
That happens, because String >> #hash doesn't work well with 5:
($a to: $z) collect: [ :each | each asString hash \\ 5 ] as: Set "===> a Set(4)"
Most of the time it's expected to return false.
>
> dictionary:= Dictionary newFromPairs: {val := AKContainer value: 'a'. 1}.
> val value: 'b'.
> dictionary includesKey: val. "true"
Same as above.
>
> All tests fails in Squeak 3.6 and in Dolphin ST. In Trunk fails only the
> Bag.
So it's just bad luck that these don't fail in Squeak trunk.
Levente
>
> If this is not a bug, how can I escape this Anomaly of disappearing element
> [1]
> Thank you
> Vaidotas
>
> [1]
> http://books.google.lt/books?id=W8_Une9cbbgC&pg=PA76&lpg=PA76&dq=anomaly+of+the+disappearing+element+smalltalk&source=bl&ots=oOsY_y8pBc&sig=EDgG-Xblp7q1ib19_YunrgBAweY&hl=en&ei=-6NSTJ-4EtGKOOW__J4O&sa=X&oi=book_result&ct=result&resnum=1&ved=0CBAQ6AEwAA#v=onepage&q=anomaly%20of%20the%20disappearing%20element%20smalltalk&f=false
>
More information about the Beginners
mailing list