錯誤清理
在諸如 C 語言之類的語言中,@goto
語句通常用於確保函式清除必要的資源,即使出現錯誤也是如此。這在 Julia 中不那麼重要,因為通常使用例外和 try
-finally
塊。
但是,Julia 程式碼可能與 C 程式碼和 C API 介面,因此有時候函式仍然需要像 C 程式碼一樣編寫。以下示例是設計的,但演示了一個常見的用例。Julia 程式碼將呼叫 Libc.malloc
來分配一些記憶體(這模擬了一個 C API 呼叫)。如果不是所有分配都成功,那麼該函式應該釋放到目前為止獲得的資源; 否則,返回分配的記憶體。
using Base.Libc
function allocate_some_memory()
mem1 = malloc(100)
mem1 == C_NULL && @goto fail
mem2 = malloc(200)
mem2 == C_NULL && @goto fail
mem3 = malloc(300)
mem3 == C_NULL && @goto fail
return mem1, mem2, mem3
@label fail
free(mem1)
free(mem2)
free(mem3)
end