这可能是一个愚蠢的问题,但它解决了我。
我已经开始从万能的书中学习 Rust 。在迭代器章节(其中链接的章节)中有以下示例
fn iterator_demonstration() {
let v1 = vec![1, 2, 3];
let mut v1_iter = v1.iter();
assert_eq!(v1_iter.next(), Some(&1));
assert_eq!(v1_iter.next(), Some(&2));
assert_eq!(v1_iter.next(), Some(&3));
assert_eq!(v1_iter.next(), None);
}
Run Code Online (Sandbox Code Playgroud)
这本书有点上釉,但我想知道 - 为什么需要&符号?
编辑:只是为了澄清 - 我确实理解iter通过不可变引用进行迭代。我只是不太明白引用数字文字(再次,菜鸟问题。)
因为它们是指针。遵循文档。
v1是一个Vec<i32>. 亦是如此。Ti32Vec没有iter方法。确实如此 。Deref [T]进一步向下滚动。[T]有一个iter方法。它返回一个std::slice::Iter<T>.v1_iter是Iter<i32>,所以T也是i32。next是特征的一部分Iterator,因此请向下滚动并查找该impl Iterator部分。next返回一个Option<&'a T>. 替代品T,这给了你Option<&'a i32>。先发制人:为什么它们是指针?
因为这就是你所要求的。如果你想通过迭代器移动out的内容Vec,你需要使用Vec::into_iteror Vec::drain。
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |