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

Joh*_*alt 5 erlang

我想做一个选择性接收,其中一个记录属性需要匹配,但无论我尝试什么语法,我得到一个"非法模式"消息.

loop(State) ->
  receive
    {response, State#s.reference} -> do_something()
  end.
Run Code Online (Sandbox Code Playgroud)

这不可能吗?

Zed*_*Zed 21

只是一种使用模式匹配的替代方案:

loop(#s{reference = Reference} = State) ->
  receive
    {response, Reference} ->
      do_something()
  end.
Run Code Online (Sandbox Code Playgroud)


Max*_*kin 8

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