加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 23:24:35 所属栏目:大数据 来源:网络整理
导读:我正在尝试编写在promises中运行的3个echo服务器,但我想知道哪个承诺正在进行回显.有没有办法做到这一点? no strict;for 0 .. 2 - $index { @result[$index] = start { $myID = $index; say "====== $myIDn"; my $rsSocket = IO::Socket::INET.new: localh
我正在尝试编写在promises中运行的3个echo服务器,但我想知道哪个承诺正在进行回显.有没有办法做到这一点?

no strict;

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

        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 "======> $indexn";

        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;

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读