我已经为Mathematica编写了一个名为MathOO的包。简而言之,它允许您在Mathematica中使用对象方向,就像在Python中一样。请阅读下面的文章中为Voofie/MathOO细节:Mathematica中的临时变量
我遇到的问题是,我想有垃圾回收器,使用户不必使用后,明确地删除对象。例如:
NewClass[Object1]
Object1.$init$[self_]:= Return[];
在上述两条线,我刚刚定义Object1是一个新的类,并构造为一个空函数。如果您熟悉Python,则应该看到与__init__()
的相似性。
实例化一个Object1,我做的:
object1 = new[Object1][]
输出是:
Out: object$13
这里,对象$ 13是一个临时变量。我想要的是,当没有对这个临时变量的引用时,它应该被自动删除。但它不能按预期工作。我发现问题如下:
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
由于y持有x $ 117的引用,所以x $ 117尚未删除。现在,让我们通过设定y的值删除对1参考:
In: y = 1;
然而,X $ 117还在这里:
In: Definition[x$117]
Out: Attributes[x$117] = {Temporary}
x$117[1] = 2
但我预计要删除的变量,因为它不再被引用。从数学的manual,它说:
所以,它是数学的一个错误:如果他们不再被引用
临时符号已经被移除?或者是否有任何解决方法?我正在使用Mathematica 7.0。非常感谢你。
请参见[本答案](http:// stackoverflow.com/questions/6867892/reducing-memory-usage-in-an-extended-mathematica-session/6873142#6873142)查看与'Module'相关的垃圾收集器中的一些错误。 – 2011-08-16 13:13:56