2014-02-12 48 views
0

時後,我看了看this question,我相信我百思不得其解,除了以下:二郎嘗試 - 追趕 - 讀取文件

try get_all_lines(Device) 
    after file:close(Device) 
end. 

尋找在documentation,特別是7.19試試部分,看起來好像通常使用after子句作爲故障安全塊來執行,而不管是否執行條件塊。如果這是一個正確的假設,爲什麼給出的示例使用after時,不僅沒有條件塊,根本就沒有塊!它看起來像try get_all_lines(Device)塊是完全空的,並且附加了不必要的after子句。我誤解了這個例子,還是這個代碼可以寫的更好?

回答

1

該塊不是空的,它包含一個函數調用:get_all_lines(Device)。如果io:get_line在這個函數內部拋出一個異常(例如,因爲該文件在讀取時被刪除,那麼get_all_lines也會拋出,並且在這種情況下以及函數無異常返回時都需要關閉文件。 after是爲了

+0

理解這段代碼的重要之處在於「after」的返回值丟失了,整個表達式的結果與'try get_all_lines(Device)'的結果相同,這有點奇怪,在erlang中的用法,但在文檔[reference_manual/expressions](http://www.erlang.org/doc/reference_manual/expressions.html#id79430)中有明確說明。 – Pascal