gpt4 book ai didi

exception - 控制或曾经与最后一团糟?

转载 作者:行者123 更新时间:2023-12-04 16:21:09 26 4
gpt4 key购买 nike

这个循环永远不会停止:

class CX::Vaya does X::Control {
has $.message
}

loop {
once {
CX::Vaya.new( message => "I messed up!" ).throw;
}
last;
CONTROL {
default {
say "Controlled { .^name }: { .message }"
}
}
}

它一直在写
Controlled CX::Last: <last control exception>
Controlled CX::Last: <last control exception>
Controlled CX::Last: <last control exception>
Controlled CX::Last: <last control exception>
Controlled CX::Last: <last control exception>
Controlled CX::Last: <last control exception>
Controlled CX::Last: <last control exception>
Controlled CX::Last: <last control exception>
...

它可能是 once位,因为带有最后一个的 CONTROL 移相器确实完成了:
loop { say "Hey"; last; CONTROL { default: .message.say } }
# OUTPUT: «Hey␤<last control exception>␤»

但我不确定。

最佳答案

Perl 6 中的循环流控制是使用控制异常实现的。因此,last实际上是在扔CX::Last控制异常。自 CONTROL块用途 default ,因此它捕获了 CX::Lastlast 抛出,这意味着控制永远不会转移出循环。

修复方法是使用 when 指定要捕获的控制异常。 :

loop {
once {
CX::Vaya.new( message => "I messed up!" ).throw;
}
last;
CONTROL {
when CX::Vaya {
say "Controlled { .^name }: { .message }"
}
}
}

关于exception - 控制或曾经与最后一团糟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56784210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com