了解 rust Option as_mut 方法
Understand rust Option as_mut method
给定一个 rust 选项:
let mut x = Some(3);
为什么我可以直接调用x.as_mut()
?从the doc可以看出,as_mut
定义为:
pub fn as_mut(&mut self) -> Option<&mut T>
Converts from &mut
Option to Option<&mut T>.
期望第一个参数为 &mut self
,即 &mut Option<T>
。我不应该改用 (&mut x).as_mut()
吗?
这里 Rust 的 .
运算符按照您的意思执行并隐式借用了变量。如果没有,使用非借用值会很烦人,因为一个值被声明为例如如果不先借用 v
,let mut v = vec![1, 2, 3]
就无法用 v.push(4)
进行操作。同样的限制也适用于字段,所以如果一个结构 包含 一个向量,你将无法在不先借用 container.vec
的情况下调用 container.vec.push(element)
(即使 container
本身已经是引用了)。
为了防止这种干扰,C 有两个用于字段访问的运算符,.
和 ->
,后者会自动取消引用。 Rust 的 .
有意继续执行方法调用所需的借用或取消引用。
给定一个 rust 选项:
let mut x = Some(3);
为什么我可以直接调用x.as_mut()
?从the doc可以看出,as_mut
定义为:
pub fn as_mut(&mut self) -> Option<&mut T>
Converts from &mut Option to Option<&mut T>.
期望第一个参数为 &mut self
,即 &mut Option<T>
。我不应该改用 (&mut x).as_mut()
吗?
这里 Rust 的 .
运算符按照您的意思执行并隐式借用了变量。如果没有,使用非借用值会很烦人,因为一个值被声明为例如如果不先借用 v
,let mut v = vec![1, 2, 3]
就无法用 v.push(4)
进行操作。同样的限制也适用于字段,所以如果一个结构 包含 一个向量,你将无法在不先借用 container.vec
的情况下调用 container.vec.push(element)
(即使 container
本身已经是引用了)。
为了防止这种干扰,C 有两个用于字段访问的运算符,.
和 ->
,后者会自动取消引用。 Rust 的 .
有意继续执行方法调用所需的借用或取消引用。