接待中的守卫

 抵制日货2502901143 发布于 2023-01-06 15:10

我在接收中遇到了一个问题,因为我是Erlang的新手,我已经阅读了我能找到的所有内容,但没有什么能让我更清楚.

这里的问题是,它永远不会检查第二后卫,我不明白为什么.

我写的警卫错了吗?有另一种方式吗?

receive

    {ask, {guessed, N}, User} when guessed < N -> 
        From ! {answer, {wrong, N, lower}},
        main_loop(N, update(wrong, Stats));

    {ask, {guessed, N}, User} when guessed > N ->       
        From ! {answer, {wrong, N, higher}},
        main_loop(N, update(wrong, Stats));       


end.

mpm.. 5

你可能会在那里感到困惑.你在保护中做的是将原子guessed与接收到的东西进行比较,并将模式匹配N变量.根据类型N和它的价值,你会得到truefalse.我想这N通常是一些数字,如果你看一下Erlang中的比较,那些将始终小于原子guessed.

我认为你所要做的就是获得N一些在特定过程中保留的价值(状态).让我们称这个状态SecretNumber.比你loop看起来像这样.

loop( SecretNumber )
  receive
      %% neat pattern match, received same number as 
      {ask, {guessed, SecretNumber }, User} ->
          User ! {answer, {right, SecretNumber}},
          ok;  % server will stop (finish)


      {ask, {guessed, N}, User} when N < SecretNumber -> 
          User ! {answer, {wrong, N, lower}},
          loop(SecretNumber);

      {ask, {guessed, N}, User} when N > SecretNumber ->       
          User ! {answer, {wrong, N, higher}},
          loop(SecretNumber)       
  end.

因此,只有当我们收到与loop第一次调用的号码相同的号码时,您才能看到第一次接收将执行(将模式匹配,因为我们称之为).

对于其他接收,我们将接收到的数字绑定到N并将其与SecreteNumber作为进程状态保存的数据进行比较.

当然我们发送消息给User(pid)我们收到了猜测.因此,User在模式中,mach将分配一个值,并且与User发送响应相同.

希望这有帮助.

1 个回答
  • 你可能会在那里感到困惑.你在保护中做的是将原子guessed与接收到的东西进行比较,并将模式匹配N变量.根据类型N和它的价值,你会得到truefalse.我想这N通常是一些数字,如果你看一下Erlang中的比较,那些将始终小于原子guessed.

    我认为你所要做的就是获得N一些在特定过程中保留的价值(状态).让我们称这个状态SecretNumber.比你loop看起来像这样.

    loop( SecretNumber )
      receive
          %% neat pattern match, received same number as 
          {ask, {guessed, SecretNumber }, User} ->
              User ! {answer, {right, SecretNumber}},
              ok;  % server will stop (finish)
    
    
          {ask, {guessed, N}, User} when N < SecretNumber -> 
              User ! {answer, {wrong, N, lower}},
              loop(SecretNumber);
    
          {ask, {guessed, N}, User} when N > SecretNumber ->       
              User ! {answer, {wrong, N, higher}},
              loop(SecretNumber)       
      end.
    

    因此,只有当我们收到与loop第一次调用的号码相同的号码时,您才能看到第一次接收将执行(将模式匹配,因为我们称之为).

    对于其他接收,我们将接收到的数字绑定到N并将其与SecreteNumber作为进程状态保存的数据进行比较.

    当然我们发送消息给User(pid)我们收到了猜测.因此,User在模式中,mach将分配一个值,并且与User发送响应相同.

    希望这有帮助.

    2023-01-06 15:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有