2014-11-06 62 views
3

我有一個模擬系統合奏的茱莉亞程序。 基本上在每個實現中,我記錄了作爲時間函數的可觀察量,並將每個實現的結果寫入文件。茱莉亞沒有關閉的文件寫入不同的輸出?

我注意到剛剛我有,我寫我的結果的文件了不正確

close(filename) 

命令。可以肯定的是,如果我沒有正確關閉我用來寫入的文件,那麼在我的數字中是否會有錯誤?

因爲當它編譯朱莉婭不會引發錯誤,我想知道這是由朱莉婭

回答

2

文件將如果打開時自動在腳本結束時關閉(或隱式進行在函數中,在函數結尾)。

更準確地說,當文件指針超出範圍時它將被關閉。

更確切地說,當文件指針被垃圾收集時它將被關閉。

+0

因此,如果我有幾個文件,每個實現一個,那麼所有文件將在模塊的末尾關閉,對吧? – user2820579 2014-11-06 15:37:42

+0

是的,一切都被關閉 – IainDunning 2014-11-06 15:46:03

+0

我沒有檢查,但我很確定文件只會在文件被垃圾收集時關閉,這可能比它超出範圍時遲。 – jch 2014-11-06 20:38:08

1

所有IOStream s將被關閉,並且在Julia進程退出之前刷新其緩衝區。但是,關閉IOStream的時間是不可預知的。

確切的機制如下。創建文件IOStreamopen函數向垃圾收集器註冊了一個終結器。定期地,Julia調用垃圾收集器,這會破壞任何無法訪問的數據結構;如果它破壞了IOStream,它將運行關閉文件的關聯終結器。

由於垃圾收集器運行的時間是不可預知的,所以最好自己明確關閉IOStream:如果忘記調用close,則應該將最終機制視爲一種額外的安全措施。