Trait core::convert::AsMut 1.0.0[−][src]
Expand description
用于进行廉价的可变到可变引用转换。
一个与 AsRef 类似的 trait,但用于在可变引用之间进行转换。
如果需要进行昂贵的转换,最好用 &mut T 类型实现 From 或编写自定义函数。
注意:此 trait 一定不能失败。如果转换失败,请使用专用方法返回 Option<T> 或 Result<T, E>。
泛型实现
- 如果内部类型是可变引用,则
AsMut自动解引用(例如:如果foo具有类型&mut Foo或&mut &mut Foo,则foo.as_mut ()将工作相同)
Examples
使用 AsMut 作为泛型函数的 trait bound,我们可以接受所有可以转换为 &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);Run