2008/7/3 Eduardo Trápani <[EMAIL PROTECTED]>: >>>> Podes probar con: http://pastie.org/224427 > > Parece que mientras "exista la llamada" no se libera la memoria. Cambié el > código para hacer postprocessing y ahora los valores son más lógicos, los > hash suben hasta 20 nada más. > > def recursiva n > > if n > 1 > recursiva n - 1 > sleep 1 > otra n > end > end > > Es como que una vez que se ejecutó 'otra' nada se libera hasta que la > invocación de esa llamada no sale de scope. No me suena muy lógico, porque > al terminar 'otra' ya salen de scope todas sus variables, no hay valor de > retorno ...
Lo que encontraste se conoce normalmente como tal recursion, y en realidad es el problema que estabas teniendo, cuando se ejecuta 'otra', sus variables no salen del scope porque las 'recursivas' anteriores todavía no terminaron de ejecutarse, estrictamente hablando, tu segunda solución tiene el mismo problema, pero evidentemente ruby está optimizando la llamada recursiva cuando está al final. Lucas. _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
