class X::AdHoc is Exception { }

X::AdHoc 是将对象包装在其中的类型,如果它们作为异常抛出,但不会从 Exception 继承。

它比返回非 Exception 对象的优势在于,它可以访问类 Exception 中的所有方法,例如 backtracerethrow

您可以使用 payload 方法获取原始对象。

try {
    die [404'File not found']; # throw non-exception object 
}
print "Got HTTP code ",
    $!.payload[0],          # 404 
    " and backtrace ",
    $!.backtrace.Str;

请注意,年轻的代码通常会使用 X::AdHoc 进行原型制作,然后稍后修改为使用 Exception 的更具体的子类型。因此,通常最好不要明确依赖于接收 X::AdHoc - 在许多情况下,使用 Exception 必须具有的 .message 方法返回的字符串是更好的选择。请注意,我们需要显式调用 .Str 以正确地将回溯字符串化。

方法§

方法 payload§

返回传递给 die 的原始对象。

方法 Numeric§

method Numeric()

将有效负载转换为 Numeric 并返回它

方法 from-slurpy§

method from-slurpy (|cap)

从捕获中创建一个新的异常并返回它。捕获将混合 SlurpySentry 角色,以便在打印消息时 .message 方法的行为不同。

try {
    X::AdHoc.from-slurpy3False"Not here" ).throw
};
print $!.payload.^name# OUTPUT: «Capture+{X::AdHoc::SlurpySentry}» 
print $!.message;       # OUTPUT: «3FalseNot here» 

SlurpySentry 角色将有效负载的元素连接起来,而不是直接将它们转换为字符串。