了解 Rust 中 Option 的 as_mut 方法

6

假设有一个Rust选项:

let mut x = Some(3);

为什么我能直接调用 x.as_mut()?从文档中可以看到,as_mut被定义为:

pub fn as_mut(&mut self) -> Option<&mut T> 从 &mut Option 转换成 Option<&mut T>。

该函数期望第一个参数是 &mut self,即 &mut Option<T>。那么我难道不应该使用 (&mut x).as_mut() 吗?
1个回答

7
在Rust中,.操作符会隐式地借用变量并完成你的意图。如果没有这个操作符,使用非借用值将变得很麻烦,因为声明为let mut v = vec![1, 2, 3]的值不能被像v.push(4)这样的语句操作,除非你写成(&mut v).push(4)。同样的情况也适用于字段,所以如果一个结构体包含一个向量,则无法在不显式地借用container.vec的情况下调用container.vec.push(element),即使container本身是一个可变引用。
为了避免这种噪音,C语言有两个字段访问操作符:.->,后者会自动解引用。Rust的.则有意进行必要的借用或解引用,以使方法调用正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接