簡體   English   中英

在Erlang中生成內退出呼叫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM