On Mon, Dec 12, 2011 at 1:56 PM, Carlo <snoob...@yahoo.ie> wrote: > Hi > > Wouldn't the fact that you use hash cause potential loops now? e.g. > collection refers to another object that refers to first collection. --> > aCollection>>hash references an item which causes this current collection's > hash to be called again? > > Hi Carlo. I am still newbie with Collections but I think I am having exactly that problem. During my tests, it loops in Collection >> #hash when sending #hash to its elements. Sorry, but I couldn't undertand what is the cause of the problem? why it doesn't work while it does using #identityHash? could you elaborate?
thanks > identityHash is deterministic in this case. > > Does this help? > Cheers > Carlo > > On 12 Dec 2011, at 10:58 AM, Mariano Martinez Peck wrote: > > Hi guys. I hope this is not a very stupid question. Background: in Fuel we > have a IdentityDictionary where we put each of the objects we find while > traversing the graph. We need to use IdentitySet because we cannot have > repetitions (and to avoid loops) so we NEED to use #==. In such dictionary > we put ALL objects of the graph, so it can be very big. Since IdentitySet > uses #identityHash, it means it will be using those ONLY 12 bits in the > object header. It means that we have 2^12 = 4096 different values. > > Question: having explained the previous, I wanted to be able to use #hash > rather than #identityHash since several classes implement #hash and hence I > thought that using #hash I could have less colisions and hence a better > performance. I tried to make a subclass of IdentitySet that uses #hash > rather than #identityHash but my image freezes. I also tried something like: > > set := PluggableSet new. > set hashBlock: [ :elem | elem hash ]. > set equalBlock: [ :a :b | a == b ]. > > But it doesn't work either. I works with simple tests in a workspace but > when I run the full tests of Fuel, it enters in a loop in the method #hash > of Collection.. > > Anyway, my question is, should that work? if not, what is the exact reason? > > Thanks in advance, > > -- > Mariano > http://marianopeck.wordpress.com > > > -- Mariano http://marianopeck.wordpress.com