我已經爲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