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