Определение собственного исключения CONTROL - PullRequest
0 голосов
/ 12 января 2019

Субъект все говорит: могу ли я определить собственное управляющее исключение, которое будет обрабатываться блоком 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 голосов
/ 13 января 2019

В прошлом это было невозможно, однако вы далеко не первый, кто просит об этом. Пользовательские исключения управления позволили бы вещам в стиле фреймворка выполнять внутренний поток управления без CATCH / default в пользовательском коде, случайно проглотившем исключения.

Bleeding edge Rakudo теперь содержит начальную реализацию принятия X::Control в качестве указания на исключение элемента управления, что означает, что код, как вы его написали, теперь работает так, как вы ожидаете. Это, за исключением возражений, появится в выпуске Rakudo 2019.01, однако его следует воспринимать как черновой вариант до тех пор, пока оно также не появится в выпуске спецификации языка.

Кроме того, был предложен тест спецификации, поэтому, если нет возражений, эта функция будет указана в будущем выпуске языка Perl 6.

...