【发布时间】:2017-04-08 03:28:50
【问题描述】:
我正在玩可恢复的异常。在这个例子中,我尝试使一些不会 numify 的东西 numify。我抓住了这一点,并尝试给 $value 变量一个适当的值,然后继续执行:
try {
my $m = 'Hello';
my $value;
$value = +$m;
put "Outside value is 「{$value.^name}」";
CATCH {
when X::Str::Numeric {
put "「$m」 isn't a number!";
put "Inside value is 「{$value.^name}」";
$value = 0;
put "Inside value is now 「$value.」";
.resume;
}
default {
put "Unhandled type 「{.^name}」";
}
}
put "End of the block";
}
put "Got to the end.";
CATCH 块可以看到它所在的词法范围,恢复从它停止的地方开始。我希望我能够更改 $value 并让块的其余部分使用该值,但在 CATCH 之外,该值将变为失败:
「Hello」 isn't a number!
Inside value is 「Any」
Inside value is now 「0.」
Outside value is 「Failure」
End of the block
Got to the end.
怎么了?
【问题讨论】:
-
我怀疑这是评估效果的顺序:异常似乎中断了
$value = +$m语句,分配仅在CATCH块执行后发生,覆盖0