代码之家  ›  专栏  ›  技术社区  ›  lisprogtor

IO::Socket::INET自去年以来的perl6变化和违背承诺

  •  2
  • lisprogtor  · 技术社区  · 7 年前

    去年我问了一个关于承诺的问题,我的echo服务器正在工作(请参阅以下链接: perl6 how to get specific identity of promises?

    我想我可以在perl6文档网站上试试这个例子( https://docs.perl6.org/type/IO::Socket::INET ),但我想找出我在代码中犯了什么错误。我目前的水平使我无法看到我的代码与perl6文档网站上的代码之间的差异。请给我一个提示;谢谢

    my @result;
    
    for 0 .. 2 -> $index {
      @result[$index] = start {
        my $myPromiseID = $index; 
        say "======> $myPromiseID\n";
    
        my $rsSocket = IO::Socket::INET.new:
        localhost => 'localhost',
        localport => 1234 + $index,
        listen    => 1;
    
        while $rsSocket.accept -> $rsConnection {
            say "Promise $myPromiseID accepted connection";
            while $rsConnection.recv -> $stuff {
            say "Promise $myPromiseID Echoing $stuff";
            $rsConnection.print($stuff);
            }
            $rsConnection.close;
        }
      }
    }
    
    await @result;
    

    错误消息为:

    Tried to get the result of a broken Promise
      in block <unit> at p6EchoMulti.pl line 24
    
    Original exception:
        Nothing given for new socket to connect or bind to
          in block  at p6EchoMulti.pl line 8
    
    Actually thrown at:
      in block  at p6EchoMulti.pl line 13
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   raiph    7 年前

    This commit ,这是 announced in the Jan 2017 section of Rakudo's changelog 正如“修复了IPv6 URI未正确解析的错误”所做的,不仅仅是修复了URI解析错误。它还完全重新定义了 IO::Socket::INET.new listen 成为一个真实的 Bool ,而不仅仅是强迫一个人。


    method new (*%args is copy) . 这与你的电话相符。错误( fail "Nothing given for new socket to connect or bind to" 1 True 在布尔上下文中 %args<host> || %args<listen> 也是 . 所以剩下的代码是用

    2017.01版的Rakudos在上面的提交链接右侧有代码。注意现在有多个 new 方法(即多个 multi method new ... 声明)。

    用于处理指定 论点的形式是 multi method new (..., Bool:D :$listen!, ...) . 注意 Bool:D .

    ,使用 真的

    但是一个电话 :listen(1) 将只匹配通用 multi method new (*%args) 改为签名。后者是无条件的 fail "Nothing given for new socket to connect or bind to";

        2
  •  1
  •   lisprogtor    7 年前

    好的,经过一些努力,如果我改变了听力,情况似乎有所改善=>1听=>是的。

    有谁愿意解释为什么1没有被评估为True,以及为什么它以前有效?