首页 > 解决方案 > 在这个判断函数中这个接收语句fullfil的目的是什么?

问题描述

我最近开始从https://learnyousomeerlang.com 在本章错误和过程中学习 Erlang ,我了解程序的作用以及它是如何执行的,但我无法弄清楚在判断函数中接收语句时的目的是什么它将如何被调用?

据我了解,如果元组模式与 Pid 和 atom 匹配,它会返回一个原子。我将如何发送消息以接收内部法官?

  start_critic() ->
  spawn(?MODULE, critic, []).

judge(Pid, Band, Album) ->
  Pid ! {self(), {Band, Album}},
  receive 
    {Pid, Criticism} -> Criticism
  after 2000 ->
    timeout
  end.

critic() ->
  receive
    {From, {"Rage Against the Turing Machine", "Unit Testify"}} ->
      From ! {self(), "They are great!"};
    {From, {"System of a Downtime", "Memoize"}} ->
      From ! {self(), "They're not Johnny Crash but they're good."};
    {From, {"Johnny Crash", "The Token Ring of Fire"}} ->
      From ! {self(), "Simply incredible."};
    {From, {_Band, _Album}} ->
      From ! {self(), "They are terrible!"}
  end,
  critic().

输出

c(linkmon).
{ok,linkmon}

Critic = linkmon:start_critic().
<0.109.0>

linkmon:judge(Critic, "Genesis", "The Lambda Lies Down on Broadway").
"They are terrible!"

linkmon:judge(Critic, "Genesis", "A trick of the Tail Recursion").
"They are terrible!"

linkmon:judge(Critic, "Johnny Crash", "The Token Ring of Fire").
"Simply incredible."

标签: functional-programmingerlang

解决方案


该行Pid ! ...向评论家发送消息。From ! ...然后,评论家将通过其中一条线路发送响应。receive函数中的等待judge所述响应,然后简单地返回响应中包含的字符串。


推荐阅读