Ho scritto un pacchetto per Mathematica chiamato MathOO. In breve, ti permette di usare l'orientamento degli oggetti in Mathematica proprio come fai tu in Python. Si prega di leggere il seguente articolo Voofie/MathOO per i dettagli:Variabili temporanee in Mathematica
Il problema che ho incontrato è che, mi piacerebbe avere garbage collector, modo che l'utente non è necessario l'eliminazione in modo esplicito l'oggetto dopo averlo usato. Per esempio:
NewClass[Object1]
Object1.$init$[self_]:= Return[];
In queste due linee, ho appena definito Object1 essere una nuova classe, e il costruttore ad essere una funzione vuoto. Se hai familiarità con Python, dovresti vedere la somiglianza con __init__()
.
creare un'istanza di un Object1, lo faccio:
object1 = new[Object1][]
L'output è:
Out: object$13
Qui, oggetto $ 13 è una variabile temporanea. Quello che voglio è che, quando non ci sono riferimenti a questa variabile temporanea, dovrebbe essere cancellato automaticamente. Ma non funziona come previsto. Ho individuato il problema di essere la seguente:
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
Poiché y contiene un riferimento di x $ 117, quindi x $ 117 non è ancora rimosso. Ora cerchiamo di eliminare il riferimento impostando il valore di y a 1:
In: y = 1;
Tuttavia, X $ 117 è ancora qui:
In: Definition[x$117]
Out: Attributes[x$117] = {Temporary}
x$117[1] = 2
ma mi aspettavo la variabile da rimuovere in quanto non è più referenziato . Dal manual di Mathematica, ha detto:
simboli temporanei vengono rimossi se non sono più referenziati:
Quindi, si tratta di un bug di Mathematica? O c'è qualche metodo di soluzione? Sto usando Mathematica 7.0. Grazie mille.
Vedere [questa risposta] (http: // stackoverflow.com/questions/6867892/reducing-memory-usage-in-an-extended-mathematica-session/6873142#6873142) per alcuni bug nel garbage collector relativo a 'Module'. –