当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。