W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
try/after
結(jié)構(gòu)允許你這樣做.例如,我們可以打開一個(gè)文件然后使用一個(gè)after
從句來關(guān)閉它--即使粗錯(cuò)了: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
從句都會(huì)被執(zhí)行.然而,注意,如果一個(gè)鏈接進(jìn)程退出了,那么這個(gè)進(jìn)程會(huì)立刻退出而且不會(huì)執(zhí)行after
從句.因此after
只提供了一個(gè)軟保險(xiǎn).幸運(yùn)的是,Elixir中的文件也鏈接到了當(dāng)前進(jìn)程,所以當(dāng)前進(jìn)程崩潰時(shí)它們總會(huì)被關(guān)閉,這是獨(dú)立于after
從句的.你會(huì)發(fā)現(xiàn)對(duì)于其他資源例如ETS表,套接字,端口等等也是成立的.
有時(shí)你會(huì)想要將整個(gè)函數(shù)包裹在try
結(jié)構(gòu)內(nèi),通常是為了保證這些代碼在之后能被執(zhí)行.這時(shí),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會(huì)自動(dòng)將函數(shù)體包裹到try
里,無論選擇after
,rescue
或catch
中的哪一個(gè).
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: