He escrito un paquete para Mathematica llamado MathOO. En resumen, le permite usar la orientación de objetos en Mathematica tal como lo hace en Python. Por favor, lea el siguiente artículo en Voofie/MathOO para más detalles:Variables temporales en Mathematica
El problema que encontramos es que, me gustaría tener recolector de basura, de manera que el usuario no tiene que borrar explícitamente el objeto después de usarlo. Por ejemplo:
NewClass[Object1]
Object1.$init$[self_]:= Return[];
En las dos líneas anteriores, I acaba de definir Object1 a ser una clase nueva, y el constructor para ser una función vacía. Si está familiarizado con Python, debería ver la similitud con __init__()
.
instanciar un Object1, que hago:
object1 = new[Object1][]
La salida es:
Out: object$13
Aquí, el objeto $ 13 es una variable temporal. Lo que quiero es que, cuando no haya referencias a esta variable temporal, se elimine automáticamente. Pero no funciona como se esperaba. He identificado el problema a ser la siguiente:
In: y = Module[{x}, x[1] = 2; x]
Out: x$117
In: FullDefinition[y]
Out: y = x$117
Attributes[x$117] = {Temporary}
x$117[1] = 2
Puesto que y contiene una referencia de x $ 117, por lo que x $ 117 no se retira aún. Ahora vamos a suprimir la referencia al establecer el valor de y hasta 1:
In: y = 1;
Sin embargo, X $ 117 es todavía aquí:
In: Definition[x$117]
Out: Attributes[x$117] = {Temporary}
x$117[1] = 2
pero esperaba la variable a ser eliminado puesto que ya no se hace referencia a . Desde el manual de Mathematica, que dijo:
símbolos temporales se eliminan si ya no están referenciados:
lo tanto, es un error de Mathematica? ¿O hay algún método de solución? Estoy usando Mathematica 7.0. Muchas gracias.
Ver [esta respuesta] (http: // stackoverflow.com/questions/6867892/reducing-memory-usage-in-an-extended-mathematica-session/6873142#6873142) para algunos errores en el recolector de basura relacionados con 'Module'. –