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