Erlang:有没有办法在receive子句中匹配记录?

时间:2009-10-08 03:24:14

标签: erlang

我想做一个需要匹配记录属性的选择性接收,但无论我尝试什么语法,我都会收到“非法模式”消息。

loop(State) ->
  receive
    {response, State#s.reference} -> do_something()
  end.

这不可能吗?

2 个答案:

答案 0 :(得分:21)

只是使用模式匹配的替代方法:

loop(#s{reference = Reference} = State) ->
  receive
    {response, Reference} ->
      do_something()
  end.

答案 1 :(得分:8)

loop(State) ->
    receive
       {response, R} when R =:= State#s.reference ->
             do_something()
    end.