- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
去年我问了一个关于 Promise 的问题时,我的 echo 服务器正在工作(请参阅此链接:perl6 how to get specific identity of promises?)。但是,使用新版本的 perl6,我的 echo 服务器不再工作。
我想我可以尝试 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
最佳答案
This commit ,即 announced in the Jan 2017 section of Rakudo's changelog因为“修复了未正确解析 IPv6 URI 的错误”所做的更多只是修复了 URI 解析错误。它还完全重做了 IO::Socket::INET.new
的参数绑定(bind)/验证。调用,结果之一是它破坏了您的代码,因为更新的代码要求 listen
做一个真正的Bool
,而不仅仅是强制一个。
旧代码(上面提交链接左侧的代码)有一个简单的 method new (*%args is copy)
.这符合您的要求。错误 ( fail "Nothing given for new socket to connect or bind to"
) 没有触发,因为 1
计算结果为 True
在 bool 上下文中,所以 %args<host> || %args<listen>
也是True
.所以剩下的代码用 listen
运行。设置为 1
一切都很好。
来自 2017.01 的 Rakudos 在上面的提交链接中有右侧的代码。注意现在有多个 new
方法(即多个 multi method new ...
声明)。
用于处理指定 listen
的调用的 multi(s)参数是/是形式multi method new (..., Bool:D :$listen!, ...)
.注意 Bool:D
.
调用 new
, 与 listen
参数设置为 True
, 匹配这个 multi 并按预期工作。
但是调用 :listen(1)
只会匹配通用 multi method new (*%args)
而是签名。后者执行无条件 fail "Nothing given for new socket to connect or bind to";
.
关于sockets - perl6 去年以来 IO::Socket::INET 的变化和违背 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788555/
我正在寻找一种更简单/更简单的方法来创建错误函数,我只是在寻找一种退出 promise 链的简单方法。下面您可以看到一个错误对象 NoUserFound 和一个 promise 链。我正在寻找的期望结
我收到的错误消息: Unhandled exception at 0x7712A9F2 in eye_tracking.exe: Microsoft C++ exception: std::futur
我试图让 JavaScript 进入同步行为,但到目前为止我失败了。 我已经尝试了 30 种或更多不同的方法,这是基于另一个答案的最新尝试,此处为 StackOverflow : function f
我是一名优秀的程序员,十分优秀!