當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Kernel.SpecialForms.receive用法及代碼示例


Elixir語言中 Kernel.SpecialForms.receive 相關用法介紹如下。

用法:

receive(args)
(宏)

檢查當前進程郵箱中是否有與給定子句匹配的消息。

如果沒有這樣的消息,當前進程會掛起,直到消息到達或等待給定的超時值。

例子

receive do
  {:selector, number, name} when is_integer(number) ->
    name
  name when is_atom(name) ->
    name
  _ ->
    IO.puts(:stderr, "Unexpected message received")
end

如果在給定的超時期限(以毫秒為單位)後未收到消息,則可以給出可選的 after 子句:

receive do
  {:selector, number, name} when is_integer(number) ->
    name
  name when is_atom(name) ->
    name
  _ ->
    IO.puts(:stderr, "Unexpected message received")
after
  5000 ->
    IO.puts(:stderr, "No message in 5 seconds")
end

即使沒有匹配子句,也可以指定 after 子句。給after 的超時值可以是任何計算為允許值之一的表達式:

  • :infinity - 進程應該無限期地等待匹配的消息,這與不使用 after 子句相同

  • 0 - 如果郵箱中沒有匹配的消息,將立即超時

  • 小於或等於 4_294_967_295 的正整數(0xFFFFFFFF 以十六進製表示) - 應該可以將超時值表示為無符號 32 位整數。

變量處理

receive/1 特殊形式處理變量的方式與 case/2 特殊宏完全相同。有關更多信息,請查看 case/2 的文檔。

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.SpecialForms.receive(args)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。