定义自己的CONTROL异常

时间:2019-01-12 01:00:14

标签: perl6

该主题说明了一切:我可以定义自己的控制异常,该异常由CONTROL块处理吗?应用X :: Control角色是无用的:

 class CX::Whatever does X::Control {
     method message { "<whatever control exception>" }
 }

 do {
     CX::Whatever.new.throw;
     CONTROL {
         say "CONTROL!!!";
         default {
             say "CONTROL: ", $_.WHAT;
         }
     }
 }

通过查看核心资源,我可以猜测只有一组预定义的异常才适合CONTROL,但不确定我没有错过任何事情。

1 个答案:

答案 0 :(得分:8)

过去不可能做到这一点,但是您远不是第一个要它的人。自定义控件异常将为框架样式的事情提供一种进行内部控制流的方式,而不会在用户代码中意外CATCH / default吞下异常。

出血边缘Rakudo现在包含一个以X::Control作为控制异常指示的初始实现,这意味着您编写的代码现在可以按预期运行。除了反对意见之外,这将出现在2019.01 Rakudo版本中,但是应视为草案功能,直到它也出现在语言规范版本中为止。

此外,已添加了建议的规范测试,因此,除非有异议,否则将在以后的Perl 6语言版本中指定此功能。