此问题在此处已有答案:
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()
吗?
1条答案
按热度按时间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的.
则有意地继续执行方法调用所需的借用或解引用。