Rust 在函数中进行模式匹配时,如何避免ref关键字&;自我或;莫特·赛尔夫?

Rust 在函数中进行模式匹配时,如何避免ref关键字&;自我或;莫特·赛尔夫?,rust,pattern-matching,Rust,Pattern Matching,生锈的书。由于我想遵循隐式建议来避免ref,在下面的玩具示例中我该如何做?您也可以在上找到代码 由于self属于&mut-self类型,因此它足以与自身匹配,同时完全省略ref。使用*self解除对其的引用或将&添加到匹配臂将导致不必要的移动 fn ref_mut(&mut self) -> &mut i32 { match self { OwnBox(i) => i, } } 然而,对于像这样的新类型,&mut self.0就足够了

生锈的书。由于我想遵循隐式建议来避免
ref
,在下面的玩具示例中我该如何做?您也可以在上找到代码


由于
self
属于
&mut-self
类型,因此它足以与自身匹配,同时完全省略
ref
。使用
*self
解除对其的引用或将
&
添加到匹配臂将导致不必要的移动

fn ref_mut(&mut self) -> &mut i32 {
    match self {
        OwnBox(i) => i,
    }
}
然而,对于像这样的新类型,
&mut self.0
就足够了


这要归功于。

我认为这本书把这些称为“遗产”是错误的;正如它所指出的,在某些情况下您仍然需要它们,有时使用
ref
会更清晰。因此,一定要了解“图案工效学”及其工作原理,但我也不认为你应该刻意避免
ref
ref mut
fn ref_mut(&mut self) -> &mut i32 {
    match self {
        OwnBox(i) => i,
    }
}