錯誤清理

在諸如 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