了解rust选项as_mut方法[重复]

osh3o9ms  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(258)

此问题在此处已有答案

What is the relation between auto-dereferencing and deref coercion?(1个答案)
三年前关闭了。
给定 rust eclipse 选项:

let mut x = Some(3);

为什么可以直接调用x.as_mut(),从文档中可以看到,as_mut的定义为:
pub fn as_mut(&mut self) -> Option<&mut T>从&mut选项转换为〈&mut T〉选项。
它的第一个参数应该是&mut self,即&mut Option<T>。我不应该使用(&mut x).as_mut()吗?

ssm49v7z

ssm49v7z1#

这里Rust的.操作符做了你想做的事情,隐式地借用了变量。如果它没有这样做,处理非借用的值会很麻烦,因为声明为let mut v = vec![1, 2, 3]的值不写(&mut v).push(4)就不能用v.push(4)来操作。同样的道理也适用于字段,所以如果一个struct contained 一个vector,如果不显式借用container.vec,就无法调用container.vec.push(element),即使container本身就是一个可变引用。
为了防止这样的噪声,C有两个操作符用于字段访问,.->,后者自动解引用,而Rust的.则有意地继续执行方法调用所需的借用或解引用。

相关问题