La procédure fautive devait créer un liste chainé et ajouter des élément
à la liste en même temps.
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code original
Procedure zaehle(z.l)
NewList test.l()
AddElement(test())
test() = z
EndProcedure
zaehle(10)
zaehle(11)
Debug test()
ForEach test()
Debug test()
Next
des appels de la procédure. Selon mon point de vue ce n'est pas un
bogue, mais plutôt une erreur d'écriture du code. Regardez la version
modifiée du code précédent.
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code modifié
Procedure zaehle(z.l)
Static OneShot.b
If OneShot = #False
NewList test.l()
OneShot = #True
EndIf
AddElement(test())
test() = z
EndProcedure
For comp = 5 To 15
zaehle(comp)
Next
ForEach test()
Debug test()
Next
premier appel et n'est pas clonée par la suite. Les valeurs sont
simplement ajouté à la liste.
L'utilisation de la variable static OneShot fait en sorte que la procédure se
rappelle toute seule si elle à créer la liste ou non.
Il est certain qu'il est agréable que le Compilateur nous retourne un
message d'erreur lorsque l'on fait des gaffes. Mais ce ne sont pas toujours
des bogues, mais plutôt la manière dont le code est écrit qui cause
problème.
J'espère que cette démonstration sera utile pour ceux qui on besoin de
procédures pour créer des listes chainées.
A+
Guimauve