接收...结束时元组中第二个参数的目的。声明?

时间:2013-03-09 04:14:53

标签: erlang arguments tuples

page下面显示的代码段说明了使用发送消息,我遇到问题的一个问题是judge(Pid, Band, Album) ->函数调用的receive子句中的第二个参数{} {1}}?

变量{Pid, Criticism} -> Criticism的目的是什么?

下面是片段:

Criticism

2 个答案:

答案 0 :(得分:2)

这不是第二个参数,它只是收到消息的一部分。阅读模式匹配,例如herehere,因为它是Erlang中非常重要的概念。

当某个具有PID P1的进程From ! {self(), "Simply incredible."}From是运行judge的进程的PID时,{P1, "Simply incredible."}与模式匹配{ {1}},以便{Pid, Criticism}绑定到PidP1绑定到Criticism

答案 1 :(得分:2)

我们假设我们有一个erlang:receive/0函数可以在邮箱中选择 first 消息并将其返回。然后我们可以重写receive如下*:

case erlang:receive() of
    {Pid, Criticism} ->
        Criticism
end.

这里的要点是receive表达式可以被认为是case的变体,它从进程邮箱中获取其输入。因此,我们可以使用模式匹配来分解消息,就像我们在case表达式中的任何其他术语一样。

当发件人使用send(!)运算符将消息传递给进程时,消息(任何Erlang术语)基本上都会复制到进程邮箱中,从中可以使用{{1 }}

*请注意,我们的虚构receive不提供跳过与所需模式不匹配的消息的工具,也不提供超时。此外,如果消息与任何case子句都不匹配,则进程将因receive/0错误而崩溃。普通case_clause表达式不是这种情况。