Trait core::convert::AsMut 1.0.0[−][src]
Expand description
用于进行廉价的可变到可变引用转换。
trait 与 AsRef
相似,但用于在变量引用之间进行转换。
如果需要进行昂贵的转换,最好用 &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