错误清理
在诸如 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