私は再開可能な例外で遊んでいます。この例では、数え切れないものを数えようとしています。私はそれをキャッチし、実行し、その後$value
変数にappropirate値を与える再開しようとすると:このPerl 6 CATCHブロックは、語彙スコープ内の変数を変更できますか?
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 "「$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を上書きします。 – Christoph