本文简要介绍rust语言中 Trait std::convert::AsMut
的用法。
用法
pub trait AsMut<T> where 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 AsMut用法及代码示例
- 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-lang.org大神的英文原创作品 Trait std::convert::AsMut。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。