Jaril,
Your problem is a basic one: "Do not alter collections while iterating over them". The messages, such as #do:, that iterate over collections are unaware that that the collection has changed, so they keep chugging from 1 to n. As a result, they can skip valid elements, process the same one twice and/or try to access beyond the end of the collection.
Your solution is a good one. If the situation were more complicated, then replacing
helpSet do: [:vector |
with
helpSet copy do: [:vector |
might be useful.
Cheers, Bob
On Sun, 1 Dec 2002 18:16:27 +0100 "Jaril" diris@volja.net wrote:
As a trial project I worked on the Path through Net problem, where I use a Point and Vector model. At some point I encountered a strange situation: the following code did not work correctly for one of vectors in the helpSet, though I did test the situation thoroughly and endPoint is postively in pointsOnPath :
helpSet do: [:vector | ( pointsOnPath includes: (vector endPoint )) ifTrue: [ helpSet remove: vector ifAbsent: [^'Error 2, class
NetClass'] ]. ].
But once I applied the following code on the same data:
helpSet := helpSet reject: [:vector | pointsOnPath includes: (vector endPoint )].
the result was correct.
I am new to ST and can't find my mistake. Any help is appreciated.
squeak-dev@lists.squeakfoundation.org