如何在 erlang 或 elixir 中接收可能值列表
Posted
技术标签:
【中文标题】如何在 erlang 或 elixir 中接收可能值列表【英文标题】:How to receive on a list of possible values in erlang or elixir 【发布时间】:2020-09-30 19:42:19 【问题描述】:是否可以有一个动态的值列表,可用于 erlang 接收块的保护。
例如我想写类似的东西
receive
Ref, Message when Ref in [Refs] ->
%% Do stuff
【问题讨论】:
如果你提供一个更详细的例子来说明你想如何使用它,也许我们可以给你一个更量身定制的想法。 【参考方案1】:在 Erlang 中,守卫仅限于在 here 中看到的守卫(没有列表:成员/2) 鉴于邮箱中的每封邮件都会进行匹配,我想说只允许在那里进行简单检查是有意义的。
我在这里看到两个选项:
-
将不需要的消息添加到状态中的queue,并在需要时在接收之前检查该队列(当接收带有不同子句时)。
在消息中包含一些标签以仅接收具有匹配标签的消息:
receive Ref, Tag, Message when Tag == State#st.listen_tag -> ...
【讨论】:
【参考方案2】:你可以试试
receive
Ref, Message when is_reference(Ref) ->
handle_message( lists:member(Ref, Refs), Message );
...
handle_message/2
可以实现为
handle_message(true, Message) ->
%% do stuff
;
handle_message(false, Message) ->
ignore.
【讨论】:
以上是关于如何在 erlang 或 elixir 中接收可能值列表的主要内容,如果未能解决你的问题,请参考以下文章
在 Elixir 或 Erlang 中,如何在运行时动态创建和加载模块?
如何在Elixir或Erlang中在运行时动态创建和加载模块?