Volledige versie bekijken : compiler braakt over recursie
[m]
%Europe/Berlin %645 %2005, 16:30
Een snipje uit mijn class:
private function controller()
{
if(!downloading)
{
current = aQueue.shift();// get new item
if(current.path.loaded == current.url) // item already downloaded
{
controller();
}
current.path.loadMovie(current.url);
downloading = true;
}
}
256 levels of recursion were exceeded in one action list.
This is probably an infinite loop.
Further execution of actions has been disabled in this movie.
Nee, flash, kijk eens goed. Grr, er komt helemaal geen 265 levels van recursie aan te pas, die if() zorgt daar wel voor!
Iemand een idee hoe ik de compiler voor kan liegen?
Roenes
%Europe/Berlin %679 %2005, 17:18
Ehmz, kun je niet een while gebruiken ipv een if? Iets in deze zin:
private function controller()
{
while(!downloading)
{
current = aQueue.shift();
if(current.path.loaded != current.url)
{
current.path.loadMovie(current.url);
downloading = true;
}
}
}
Je hebt dan alleen geen recursieve functie meer. Ik weet niet of dat perse noodzakelijk was :)
[m]
%Europe/Berlin %693 %2005, 17:38
Ehmz, kun je niet een while gebruiken ipv een if? Iets in deze zin:
private function controller()
{
while(!downloading)
{
current = aQueue.shift();
if(current.path.loaded != current.url)
{
current.path.loadMovie(current.url);
downloading = true;
}
}
}
Je hebt dan alleen geen recursieve functie meer. Ik weet niet of dat perse noodzakelijk was :)
Daar was ik ook achtergekomen, maar dat neemt niet weg dat die compiler aan het zeiken is over iets waar hij eigenlijk niet over zeiken mag (alleen een waarschuwing geven).
Ach, het probleem is opgelost. :)
Dauntless
%Europe/Berlin %694 %2005, 17:40
En wat krijg je als je 'downloading' traced, vlak voor die if ?
Roenes
%Europe/Berlin %697 %2005, 17:44
En wat krijg je als je 'downloading' traced, vlak voor die if ?Zou geen problemen moeten geven icm met recursiviteit. Dan zou hoogstens je if nooit in werking treden en gebeurt er niets :)
Dauntless
%Europe/Berlin %700 %2005, 17:49
Nieuw AS document:
if(!i){ trace("true")};
En je ziet het 'true' . Dus als zijn downloading undefined is kan het zijn dat hij toch blijft doorgaan... (ondanks die toekenning (downloading = true) maar misschien omdat hij downloading niet vind dat hij er ook geen nieuwe waarde aan kan geven)..
Er moet toch een rede zijn!
[m]
%Europe/Berlin %721 %2005, 18:18
Nieuw AS document:
if(!i){ trace("true")};
En je ziet het 'true' . Dus als zijn downloading undefined is kan het zijn dat hij toch blijft doorgaan... (ondanks die toekenning (downloading = true) maar misschien omdat hij downloading niet vind dat hij er ook geen nieuwe waarde aan kan geven)..
Er moet toch een rede zijn!
hij geeft een compile error aan, voordat hij de code oproept krijg je al gelijk het bericht.
Als je het echt wilt weten:
class dikkiedik(){
private downloading:Boolean;
current:Object;
aQueue:Array;
dikkiedik(){
downloading = false;
current = {};
aQueue = [];
controller();
}
private function controller()
{
if(!downloading)
{
current = aQueue.shift();// get new item
if(current.path.loaded == current.url) // item already downloaded
{
controller();
}
current.path.loadMovie(current.url);
downloading = true;
}
}
}
Code is wel een beetje ingekort natuurlijk. :) Hij wert nu niet 100%, omdat undefined == undefined ( maar dat snap je wel, hoop ik ;)).
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.