С какой целью это получает заявление в полном объеме в этой функции судьи? - PullRequest
0 голосов
/ 28 мая 2019

Я недавно начал изучать Эрланг с https://learnyousomeerlang.com в этой главе ошибки и процессы , я понял, что делает программа и как она выполняется, но я не могу понять, для чего это нужно, чтобы получить утверждение в функции судьи, когда и как оно будет вызываться?

Из того, что я понимаю, если шаблон кортежа совпадает с 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."

1 Ответ

1 голос
/ 28 мая 2019

Строка Pid ! ... отправляет сообщение критику.Затем критик отправит ответ по одной из From ! ... строк.receive в функции judge ожидает указанного ответа и затем просто возвращает строку, содержащуюся в ответе.

...