Trait std::convert::AsMut1.0.0[][src]

pub trait AsMut<T> where
    T: ?Sized
{ fn as_mut(&mut self) -> &mut T; }
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

Required methods

执行转换。

Implementors