Struct std::panic::AssertUnwindSafe1.9.0[][src]

pub struct AssertUnwindSafe<T>(pub T);
Expand description

一个简单的包装器,可以断言它是 unwind 安全的。

使用 catch_unwind 时,可能某些封闭变量不是 unwind 安全的。例如,如果捕获了 &mut T,编译器将生成一条警告,指出它不是 unwind 安全的。 但是,如果特别考虑了 unwind 的安全性,则由于 catch_unwind 的特定用法,实际上可能不是问题。 此包装结构体对于快速且轻便的注解很有用,因为变量确实是 unwind 安全的。

Examples

使用 AssertUnwindSafe 的一种方法是断言整个闭包本身是 unwind 安全的,绕过所有变量的所有检查:

use std::panic::{self, AssertUnwindSafe};

let mut variable = 4;

// 由于闭包捕获 `&mut variable` (默认情况下不认为 unwind 安全),因此不会编译该代码。

// panic::catch_unwind (|| { variable += 3; }) ;

// 但是,由于 `AssertUnwindSafe` 包装器,它将进行编译
let result = panic::catch_unwind(AssertUnwindSafe(|| {
    variable += 3;
}));
// ...
Run

包装整个闭包就等于断言所有捕获的变量都是 unwind 安全的。不利之处在于,如果在 future 中添加了新的捕获,它们也将被视为 unwind 安全。 因此,您可能希望只包装单个捕获,如下所示。 这是更多的注解,但是它可以确保如果添加的 unwind 不安全的新捕获,您将在那时遇到编译错误,这将使您考虑该新捕获是否实际上代表错误。

use std::panic::{self, AssertUnwindSafe};

let mut variable = 4;
let other_capture = 3;

let result = {
    let mut wrapper = AssertUnwindSafe(&mut variable);
    panic::catch_unwind(move || {
        **wrapper += other_capture;
    })
};
// ...
Run

Trait Implementations

使用给定的格式化程序格式化该值。 Read more

解引用后的结果类型。

解引用值。

可变地解引用该值。

使用调用运算符后的返回类型。

🔬 This is a nightly-only experimental API. (fn_traits #29625)

执行调用操作。

完成时产生的值类型。

尝试将 future 解析为最终值,如果该值尚不可用,请注册当前任务以进行唤醒。 Read more

🔬 This is a nightly-only experimental API. (async_stream #79024)

流产生的项的类型。

🔬 This is a nightly-only experimental API. (async_stream #79024)

尝试拉出该流的下一个值,如果该值尚不可用,则注册当前任务以进行唤醒,如果流已用尽,则返回 NoneRead more

🔬 This is a nightly-only experimental API. (async_stream #79024)

返回流剩余长度上的边界。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

🔬 This is a nightly-only experimental API. (into_future #67644)

future 完成时将产生的输出。

🔬 This is a nightly-only experimental API. (into_future #67644)

我们要把它变成哪种 future?

🔬 This is a nightly-only experimental API. (into_future #67644)

根据一个值创建一个 future。

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。