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

Responder a