|
|
@ -373,7 +373,7 @@ $ cargo build
|
|
|
|
|
|
|
|
|
|
|
|
大家可能会觉得 `&**` 的形式看上去有些烂,没错,确实如此。但是就像一瓶好酒一样,Rust 也随着时间的推进变得越来越好,因此现在我们已经无需再这么做了。事实上,Rust 很擅长隐式地做类似的转换,或者可以称之为 [`Deref`](https://course.rs/advance/smart-pointer/deref.html)。
|
|
|
|
大家可能会觉得 `&**` 的形式看上去有些烂,没错,确实如此。但是就像一瓶好酒一样,Rust 也随着时间的推进变得越来越好,因此现在我们已经无需再这么做了。事实上,Rust 很擅长隐式地做类似的转换,或者可以称之为 [`Deref`](https://course.rs/advance/smart-pointer/deref.html)。
|
|
|
|
|
|
|
|
|
|
|
|
但是 `Deref` 在这里并不能很好的完成自己的任务,原因是在闭包中使用 `Option<&T>` 而不是 `&T` 对于它来说有些过于复杂了,因此我们需要显式地去帮助它完成任务。好在根据我的经验来看,这种情况还是相当少见的。
|
|
|
|
但是自动 `Deref` 在这里并不能很好的完成自己的任务,原因在于 `Deref trait` 是为了智能指针解引用设计的,而 `Option` 不是智能指针,因此其本身并没有实现 `Deref` trait。当编译器遇到一个Option<T>,自然就和遇见一个enum一样无能为力了。
|
|
|
|
|
|
|
|
|
|
|
|
事实上,还可以使用另一种方式来实现:
|
|
|
|
事实上,还可以使用另一种方式来实现:
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|