[Newbies] Anomaly of disappearing element in Bag?

Vaidotas Didžbalis vaidasd at gmail.com
Fri Jul 30 20:14:32 UTC 2010


So, one needs to remember and rehash some collections manually after
mutable object is changed? Brrr. I will forget.

2010/7/30 Levente Uzonyi <leves at elte.hu>:
> 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
>
> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>
>


More information about the Beginners mailing list