是否可以有一个动态的值列表,可以在Erlang接收块的保护中使用。例如,我想写这样的内容
receive {Ref, Message} when Ref in [Refs] -> %% Do stuff
wxclj1h51#
在Erlang中,守卫仅限于此处所示的那些(no lists:member/2)。鉴于对邮箱中的每封邮件都运行匹配,我认为只允许简单检查是有意义的。这里有两个选项:1.将不需要的消息添加到状态为的queue中,并在需要时检查接收之前的队列(当存在具有不同子句的接收时)。1.在消息中包含一些标记,以便仅接收具有匹配标记的消息:
receive {Ref, Tag, Message} when Tag == State#st.listen_tag -> ...
ojsjcaue2#
你可以试试
receive {Ref, Message} when is_reference(Ref) -> handle_message( lists:member(Ref, Refs), Message ); ...
handle_message/2可以实现为
handle_message/2
handle_message(true, Message) -> %% do stuff ; handle_message(false, Message) -> ignore.
2条答案
按热度按时间wxclj1h51#
在Erlang中,守卫仅限于此处所示的那些(no lists:member/2)。鉴于对邮箱中的每封邮件都运行匹配,我认为只允许简单检查是有意义的。
这里有两个选项:
1.将不需要的消息添加到状态为的queue中,并在需要时检查接收之前的队列(当存在具有不同子句的接收时)。
1.在消息中包含一些标记,以便仅接收具有匹配标记的消息:
ojsjcaue2#
你可以试试
handle_message/2
可以实现为