本文簡要介紹rust語言中 Struct std::panic::AssertUnwindSafe
的用法。
用法
pub struct AssertUnwindSafe<T>(pub T);
一個類型的簡單包裝器,用於斷言它是展開安全的。
使用 catch_unwind
時,可能會出現一些封閉變量不是展開安全的情況。例如,如果 &mut T
被捕獲,編譯器將生成一個警告,表明它不是展開安全的。但是,如果特別考慮了展開安全性,由於 catch_unwind
的特定用法,這實際上可能不是一個問題。這個包裝結構對於變量確實是展開安全的快速和輕量級注釋很有用。
例子
使用AssertUnwindSafe
的一種方法是斷言整個閉包本身是展開安全的,繞過對所有變量的所有檢查:
use std::panic::{self, AssertUnwindSafe};
let mut variable = 4;
// This code will not compile because the closure captures `&mut variable`
// which is not considered unwind safe by default.
// panic::catch_unwind(|| {
// variable += 3;
// });
// This, however, will compile due to the `AssertUnwindSafe` wrapper
let result = panic::catch_unwind(AssertUnwindSafe(|| {
variable += 3;
}));
// ...
包裝整個閉包相當於一個籠統的斷言,即所有捕獲的變量都是安全的。這樣做的缺點是,如果將來添加新的捕獲,它們也將被認為是安全的。因此,您可能更喜歡僅包裝單個捕獲,如下所示。這是更多的注釋,但它確保如果添加了一個不安全的新捕獲,那麽您將在那時得到一個編譯錯誤,這將允許您考慮該新捕獲是否實際上代表一個錯誤。
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;
})
};
// ...
元組字段
0: T
相關用法
- Rust AsFd.as_fd用法及代碼示例
- Rust AsHandle.as_handle用法及代碼示例
- Rust AsMut用法及代碼示例
- Rust AsRawFd.as_raw_fd用法及代碼示例
- Rust AsciiExt用法及代碼示例
- Rust AsRef用法及代碼示例
- Rust AtomicU8.fetch_sub用法及代碼示例
- Rust AtomicPtr.compare_exchange_weak用法及代碼示例
- Rust AtomicU32.fetch_min用法及代碼示例
- Rust AtomicI8.fetch_or用法及代碼示例
- Rust AtomicI8.as_mut_ptr用法及代碼示例
- Rust AtomicU8.fetch_or用法及代碼示例
- Rust AtomicUsize.load用法及代碼示例
- Rust AtomicI16.fetch_min用法及代碼示例
- Rust AtomicI16.fetch_and用法及代碼示例
- Rust AtomicU16.into_inner用法及代碼示例
- Rust AtomicI16.fetch_nand用法及代碼示例
- Rust AtomicI32.compare_exchange用法及代碼示例
- Rust AtomicU16.from_mut用法及代碼示例
- Rust AtomicI16.swap用法及代碼示例
- Rust AtomicU8.as_mut_ptr用法及代碼示例
- Rust AtomicBool.fetch_update用法及代碼示例
- Rust AtomicU32.fetch_max用法及代碼示例
- Rust AtomicI64.from_mut用法及代碼示例
- Rust Arc.assume_init用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Struct std::panic::AssertUnwindSafe。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。