rename Rust编程学院 -> Rust语言学习社区

pull/573/head
sunface 3 years ago
parent 50df514da8
commit 76a71eb7d6

@ -10,7 +10,7 @@
</div>
- 在线阅读
- Rust编程学院 [https://course.rs](https://course.rs)
- 官网 [https://course.rs](https://course.rs)
- 知乎专栏: [支持章节内目录跳转,很好用!](https://www.zhihu.com/column/c_1452781034895446017)
- 配套项目
@ -50,7 +50,7 @@
## 学习社区
为了帮助大家更好的学习和交流 Rust我们建立了一个社区**Rust编程学院**。
为了帮助大家更好的学习和交流 Rust我们建立了一个社区**Rust语言学习社区**。
QQ群 1009730433 欢迎大家加入,一起 happy一起进步。

@ -240,7 +240,6 @@
- [编译器优化 todo](profiling/compiler/optimization/intro.md)
- [Option 枚举 todo](profiling/compiler/optimization/option.md)
- [标准库解析 todo](std/intro.md)
- [标准库使用最佳时间 todo](std/search.md)
- [Vector 常用方法 todo](std/vector.md)

@ -50,7 +50,7 @@
## 学习社区
为了帮助大家更好的学习和交流 Rust我们建立了一个社区**Rust编程学院**。
为了帮助大家更好的学习和交流 Rust我们建立了一个社区**Rust学习社区**。
QQ群 1009730433 欢迎大家加入,一起 happy一起进步。

@ -24,3 +24,66 @@ impl<T> Iterator for IntoIter<T> {
答案是: `DoubleEndedIterator`,它继承自 `Iterator`( 通过 [`supertrait`](https://course.rs/basic/trait/advance-trait.html?highlight=supertrait#特征定义中的特征约束) ),因此意味着要实现该特征,首先需要实现 `Iterator`
这样只要为 `DoubleEndedIterator` 实现 `next_back` 方法,就可以支持双向迭代了: `Iterator``next` 方法从前往后,而 `next_back` 从后向前。
```rust
impl<T> DoubleEndedIterator for IntoIter<T> {
fn next_back(&mut self) -> Option<T> {
self.0.pop_back()
}
}
```
测试下:
```rust
#[test]
fn into_iter() {
let mut list = List::new();
list.push_front(1); list.push_front(2); list.push_front(3);
let mut iter = list.into_iter();
assert_eq!(iter.next(), Some(3));
assert_eq!(iter.next_back(), Some(1));
assert_eq!(iter.next(), Some(2));
assert_eq!(iter.next_back(), None);
assert_eq!(iter.next(), None);
}
```
```shell
cargo test
Running target/debug/lists-5c71138492ad4b4a
running 11 tests
test fourth::test::basics ... ok
test fourth::test::peek ... ok
test fourth::test::into_iter ... ok
test first::test::basics ... ok
test second::test::basics ... ok
test second::test::iter ... ok
test second::test::iter_mut ... ok
test third::test::iter ... ok
test third::test::basics ... ok
test second::test::into_iter ... ok
test second::test::peek ... ok
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured
```
## Iter
这里又要用到糟糕的 `Ref`:
```rust
pub struct Iter<'a, T>(Option<Ref<'a, Node<T>>>);
impl<T> List<T> {
pub fn iter(&self) -> Iter<T> {
Iter(self.head.as_ref().map(|head| head.borrow()))
}
}
```
```shell
> cargo build
```

Loading…
Cancel
Save