J'ai écrit un package pour Mathematica appelé MathOO. En bref, il vous permet d'utiliser l'orientation objet dans Mathematica comme vous le faites en Python. S'il vous plaît lire l'article suivant Voofie/MathOO pour plus de détails:Variables temporaires dans Mathematica
Le problème que je rencontrais est, je voudrais avoir éboueur, de sorte que l'utilisateur ne doit pas supprimer explicitement l'objet après l'avoir utilisé. Par exemple:
NewClass[Object1]
Object1.$init$[self_]:= Return[];
Dans les deux lignes ci-dessus, je viens de définir Object1 être une nouvelle classe, et le constructeur d'être une fonction vide. Si vous êtes familier avec Python, vous devriez voir la similarité avec __init__()
.
Pour instancier un Object1, je fais:
object1 = new[Object1][]
La sortie est:
Out: object$13
Ici, objet 13 $ est une variable temporaire. Ce que je veux, c'est quand il n'y a aucune référence à cette variable temporaire, il devrait être supprimé automatiquement. Mais cela ne fonctionne pas comme prévu. J'ai identifié le problème à être les suivants:
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
Puisque y détient une référence de x 117 $, donc x 117 $ n'est pas supprimé encore. Maintenant, nous allons supprimer la référence en définissant la valeur de y à 1:
In: y = 1;
Cependant, x 117 $ est toujours là:
In: Definition[x$117]
Out: Attributes[x$117] = {Temporary}
x$117[1] = 2
Mais j'attend la variable à supprimer car il n'est plus référencé . De l'manual de Mathematica, il a dit:
symboles temporaires sont supprimés si elles ne sont plus référencés:
Alors, est-ce un bug de Mathematica? Ou y a-t-il des méthodes de contournement? J'utilise Mathematica 7.0. Merci beaucoup.
Voir [cette réponse] (http: // stackoverflow.com/questions/6867892/reducing-memory-usage-in-an-extended-mathematica-session/6873142#6873142) pour certains bogues dans le garbage collector liés à 'Module'. –