[英]Exit call inside spawn in erlang
我是Erlang的新手,我想知道兩個代碼段之間的區別。
spawn_link(exit(fun()-> myfun() end))
和
spawn_link(fun()->exit(myfun()) end)
我以為行為會是一樣的,但事實並非如此。
spawn_link
是一個函數,並且調用的行為類似於普通的函數調用:首先對參數進行求值,然后使用求值后的參數調用函數。
因此,在第一個示例中, spawn_link
的參數為:
exit(fun()-> myfun() end)
exit
,當一個參數調用,使得目前的進程退出,使用參數作為退出的原因。 因此,在這種情況下,進程在有機會調用spawn_link
之前崩潰,並且從不產生新進程。 (當前進程的退出原因將是一個fun
,這是非常不尋常的,但允許。該fun
將不會被調用。)
在第二個示例中, spawn_link
的參數為:
fun()->exit(myfun()) end
那很fun
。 在調用該函數之前,不會評估其中的表達式。 因此,我們將此函數傳遞給spawn_link
,它產生一個運行此函數的新進程。 新產生的進程將調用myfun
,然后以myfun
的返回值作為退出原因退出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.