Total List-Weirdness?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Fetze

Betreff: Total List-Weirdness?

BeitragSa, März 18, 2006 9:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Ich habe seit jetzt rund 4 Tagen mit einem Bug zu kämpfen, der jeglicher Logik entbehrt. Schaut euch mal diesen Code an:

Code: [AUSKLAPPEN]

DebugLog listUpdated.Contains(Self)
listUpdated.Remove Self
iCountUpdated:- 1
DebugLog "->Station " + sName + "-> SetUpdateState(False)"
DebugLog listUpdated.Contains(Self)


Liefert mir zurück:
Zitat:

DebugLog:1
DebugLog:->Station Beta-> SetUpdateState(False)
DebugLog:1



... hat jemand eine Erklärung dafür?

Fetze

BeitragSa, März 18, 2006 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, ich hab den Fehler gerade gefunden, nachdem ich langsam begann, an einen Fehler seitens BRL zu denken.

LinkedList verwendet für FindLink und damit auch für alle damit verbundenen Methoden und Funktionen inklusive Remove( obj:Object ) die COmpare-Methode des Objekts, um seine Identität zu prüfen. Daraus ergeben sich schwerwiegende Fehler, sollte dabei mehr als ein Objekt in der Liste den Wert 0 zurückliefern, da so beide für das gleiche Objekt gehalten werden und davon das erste in der Liste entfernt wird.

Also: Immer schön Sicherheitsprüfungen in die COmpare-Methode schreiben.
 

Dreamora

BeitragSa, März 18, 2006 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht einfacher: Garnicht die Compare überschreiben, wenn du kein eigenständiges Sorting braucht. Dann wird nach Pointerwert sortiert und nur Referenzgleicheobjekte können 0 zurückliefern.

Oder du baust bei dir in die Compare ein, dass nur 0 zurückgeliefert wird bei Pointergleichheit (heisst if other = self return 0)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Fetze

BeitragSa, März 18, 2006 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ich hab Compare bei mir für ZOrder verwendet, von daher ist es schon sinnvoll. Allerdings wurde 0 bei allen Objekten mit gleichem ZOrder-Wert zurückgeliefert, was das Problem verursachte. Das habe ich jetzt damit gelöst, dass bei gleichem ZOrder-Wert einfach 1 zurückgegeben wird, es sei denn, Vergleichsobjekt und aufrufendes Objekt sind gleich.
 

Dreamora

BeitragSa, März 18, 2006 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
OK dann macht es rein aus der Logik heraus Sinn, es mit 0 zu lösen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group