In Exception§
有关例程 fail,请参见上下文中的主要文档
multi fail(Exception )method fail(Exception:)
退出调用Routine
并返回一个Failure
对象,该对象包装异常。
# A custom exception definedis Exceptionsub say-word ( )my = say-word("foo");say .exception;
例程形式以相同的方式工作,采用替代语法:fail ForbiddenWord.new(:word($word))
。
In Failure§
有关子例程 fail,请参见上下文中的主要文档
multi fail(--> Nil)multi fail(*)multi fail(Exception --> Nil )multi fail( --> Nil)multi fail(|cap (*) --> Nil)multi fail(Failure --> Nil)multi fail(Failure --> Nil)
退出调用Routine
并返回一个Failure
对象,该对象包装异常$e
- 或者,对于cap
或$payload
形式,一个X::AdHoc
异常,该异常由@text
的连接构成。如果调用者通过编译指令use fatal;
激活致命异常,则会引发异常,而不是将其作为Failure
返回。
# A custom exception definedis Exceptionsub copy-directory-tree ()# A Failure with X::AdHoc exception object is returned and# assigned, so no throwing Would be thrown without an assignmentmy = copy-directory-tree("cat.jpg");say .exception; # OUTPUT: «cat.jpg is not a directory»# A Failure with a custom Exception object is returned= copy-directory-tree('foo');say .exception; # OUTPUT: «This directory is forbidden: 'foo'»
如果使用通用Failure
调用它,则会引发一个特殊的未定义失败;如果它是一个已定义的Failure
,它将被标记为未处理。
sub re-failmy = re-fail;say .handled; # OUTPUT: «False»
In Channel§
有关方法 fail,请参见上下文中的主要文档
method fail(Channel: )
关闭Channel
(即,使后续send
调用终止),并将错误排队作为Channel
中的最后一个元素引发。方法receive
会将该错误作为异常引发。如果Channel
已关闭或已在其上调用.fail
,则不执行任何操作。
my = Channel.new;.fail("Bad error happens!");.receive;CATCH ;# OUTPUT: «X::AdHoc: Bad error happens!»