perl6如何获得承诺的具体身份?

前端之家收集整理的这篇文章主要介绍了perl6如何获得承诺的具体身份?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试编写在promises中运行的3个echo服务器,但我想知道哪个承诺正在进行回显.有没有办法做到这一点?

no strict;

for 0 .. 2 -> $index {
    @result[$index] = start {
        $myID = $index; 
        say "======> $myID\n";

        my $RSSocket = IO::Socket::INET.new:
            localhost => 'localhost',localport => 1234 + $index,listen    => 1;

        while $RSSocket.accept -> $rsConnection {
            say "Promise $myID accepted connection";
            while $rsConnection.recv -> $stuff {
                say "promise $myID Echoing $stuff";
                $rsConnection.print($stuff);
            }
            $rsConnection.close;
        }
    }
}

await @result;

echo服务器运行正常;用“nc”测试;

问题是在创建承诺后$myID变为2,并且我无法告诉哪个承诺正在进行当前回显.似乎$myID被所有承诺使用;有没有办法创建特定于个人承诺的变量?

解决方法

你根本不需要一个$myID.您可以在promise中使用$index,因为它已经作用于循环块.这是一个工作修改(严格限制):

my @result = do for 0 .. 2 -> $index {
    start {
        say "======> $index\n";

        my $RSSocket = IO::Socket::INET.new:
            localhost => 'localhost',listen    => 1;

        while $RSSocket.accept -> $rsConnection {
            say "Promise $index accepted connection";
            while $rsConnection.recv -> $stuff {
                say "promise $index Echoing $stuff";
                $rsConnection.print($stuff);
            }
            $rsConnection.close;
        }
    }
}

await @result;

有了这种照顾,我觉得有必要指出使用不严格似乎是非常不必要的.它不仅让你对这些奇怪的范围问题持开放态度,而且在你的例子中你做的基本上没有任何好处.

重新启用对未修改代码的严格修复并修复两个编译错误显示只保存了四次击键 – 代价是你在这里输入问题时使用了很多键.

猜你在找的Perl相关文章