is Exception
X::AdHoc
是将对象包装在其中的类型,如果它们作为异常抛出,但不会从 Exception
继承。
它比返回非 Exception
对象的优势在于,它可以访问类 Exception
中的所有方法,例如 backtrace
和 rethrow
。
您可以使用 payload
方法获取原始对象。
tryprint "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;print $!.payload.^name; # OUTPUT: «Capture+{X::AdHoc::SlurpySentry}»print $!.message; # OUTPUT: «3FalseNot here»
SlurpySentry
角色将有效负载的元素连接起来,而不是直接将它们转换为字符串。