简洁的方法将抛出异常改为失败?

J H*_*all 8 error-handling exception-handling try-catch rakudo perl6

是否有更简洁的方法将抛出的异常提升为失败而不是以下?

try {
    die 'always';
    CATCH { default { fail $_ } }
}
Run Code Online (Sandbox Code Playgroud)

mor*_*itz 6

try something();
fail $! if $!;
Run Code Online (Sandbox Code Playgroud)

请注意,CATCH块适用于同一范围内的所有语句,甚至适用于CATCH块之后的代码.因此,如果您想使用CATCH块,请注意保持范围较小.


tim*_*imo 6

这是一个更简洁的moritz代码版本.

(try something()) orelse fail $!;
Run Code Online (Sandbox Code Playgroud)

  • 如果 `something` 返回未定义的值(甚至不抛出异常),`(try Something) // failure` 也会触发。 (2认同)

Edw*_*uck 5

try块是多余的

die 'always';
CATCH { default { fail $_; } }
Run Code Online (Sandbox Code Playgroud)

但我不担心保存打字的字符.您的意图清晰且具有高度可读性.

以表达您的意图或可读性为代价来保存键入的字符可能在Perl的遗产中占有一席之地,但它不是您希望自己进行维护编程的地方.

  • `fail`也作为`Exception`的方法存在,所以你也可以:`CATCH {default {.fail}}` (4认同)