定义自己的CONTROL异常

Vad*_*man 6 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;
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

通过查看核心资源我可以猜测只有一组预定义的异常才被认为是合适的CONTROL,但不确定我没有错过任何东西.

Jon*_*ton 8

这在过去是不可能的,但是你远不是第一个要求它的人.自定义控制异常将提供框架式的事情要做,而不内部控制流量的方式CATCH/ default用户代码误吞例外.

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

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