從 Learn You Some Erlang for Great Good!目的`接收後0`
另一種特殊情況是,當超時爲0:
flush() -> receive _ -> flush() after 0 -> ok end .
當這種情況發生,Erlang的虛擬機將試圖找到一條消息這適合 可用模式之一。在上面的情況下,任何匹配。由於 只要有消息,
flush/0
函數將遞歸調用 本身,直到郵箱爲空。一旦完成,代碼的ok部分被執行,函數返回。
我不明白after 0
的用途。閱讀上面的文字後,我還以爲是像after infinity
(永遠等待),但我改變一點點沖洗功能:
flush2() ->
receive
_ -> timer:sleep(1000), io:format("aa~n"), flush()
after 0 ->
okss
end
.
flush3() ->
receive
_ -> io:format("aa~n"), flush()
after 0 ->
okss
end
.
在等待1秒第一功能和第二功能,它不會等待。
在這兩種情況下,它都不顯示文字(aa~n
)。
因此它不起作用after infinity
。
如果receive
和after
之間的塊不那麼上述2級執行的代碼可以簡化爲:
flush4() ->
okss
.
什麼我失蹤?
ps。我記得Erlang R16B03-1,我記得這本書的作者是在Erlang R13上。
當作爲最終代碼分支查看時,它更有意義。 –