本文简要介绍rust语言中 Trait core::convert::AsMut 的用法。
用法
pub trait AsMut<T: ?Sized> {
fn as_mut(&mut self) -> &mut T;
}用于进行廉价的mutable-to-mutable 参考转换。
此特征类似于 AsRef ,但用于在可变引用之间进行转换。如果您需要进行昂贵的转换,最好使用类型&mut T 实现 From 或编写自定义函数。
注意:这个特质一定不能失败.如果转换可能失败,请使用返回的专用方法Option<T>或一个Result<T, E>.
通用实现
- 如果内部类型是可变引用,则
AsMut自动取消引用(例如:如果foo具有类型&mut Foo或&mut &mut Foo,则foo.as_mut()的工作方式相同)
例子
使用 AsMut 作为泛型函数的特征绑定,我们可以接受所有可以转换为类型 &mut T 的可变引用。因为 Box<T> 实现了 AsMut<T> 我们可以编写一个函数 add_one ,它接受所有可以转换为 &mut u64 的参数。因为 Box<T> 实现了 AsMut<T> ,所以 add_one 也接受 &mut Box<u64> 类型的参数:
fn add_one<T: AsMut<u64>>(num: &mut T) {
*num.as_mut() += 1;
}
let mut boxed_num = Box::new(0);
add_one(&mut boxed_num);
assert_eq!(*boxed_num, 1);相关用法
- Rust AsFd.as_fd用法及代码示例
- Rust AsHandle.as_handle用法及代码示例
- Rust AssertUnwindSafe用法及代码示例
- 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大神的英文原创作品 Trait core::convert::AsMut。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
