W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
try/after
結構允許你這樣做.例如,我們可以打開一個文件然后使用一個after
從句來關閉它--即使粗錯了:iex> {:ok, file} = File.open "sample", [:utf8, :write]
iex> try do
...> IO.write file, "olá"
...> raise "oops, something went wrong"
...> after
...> File.close(file)
...> end
** (RuntimeError) oops, something went wrong
無論try
塊中的代碼是否成功,after
從句都會被執(zhí)行.然而,注意,如果一個鏈接進程退出了,那么這個進程會立刻退出而且不會執(zhí)行after
從句.因此after
只提供了一個軟保險.幸運的是,Elixir中的文件也鏈接到了當前進程,所以當前進程崩潰時它們總會被關閉,這是獨立于after
從句的.你會發(fā)現(xiàn)對于其他資源例如ETS表,套接字,端口等等也是成立的.
有時你會想要將整個函數(shù)包裹在try
結構內(nèi),通常是為了保證這些代碼在之后能被執(zhí)行.這時,Elixir允許你省略try
這一行:
iex> defmodule RunAfter do
...> def without_even_trying do
...> raise "oops"
...> after
...> IO.puts "cleaning up!"
...> end
...> end
iex> RunAfter.without_even_trying
cleaning up!
** (RuntimeError) oops
Elixir會自動將函數(shù)體包裹到try
里,無論選擇after
,rescue
或catch
中的哪一個.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: