当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust AsMut用法及代码示例


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