迭代器的下一个返回 Some(&1)。为什么?

avs*_*hyz 5 rust

这可能是一个愚蠢的问题,但它解决了我。

我已经开始从万能的书中学习 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通过不可变引用进行迭代。我只是不太明白引用数字文字(再次,菜鸟问题。)

DK.*_*DK. 6

因为它们是指针。遵循文档。

  • v1是一个Vec<i32>. 亦是如此。Ti32
  • Vec没有iter方法。确实如此Deref[T]进一步向下滚动。
  • [T]有一个iter方法。它返回一个std::slice::Iter<T>.
  • v1_iterIter<i32>,所以T也是i32
  • next是特征的一部分Iterator,因此请向下滚动并查找该impl Iterator部分。
  • 就在下面,它指定next返回一个Option<&'a T>. 替代品T,这给了你Option<&'a i32>

先发制人:为什么它们是指针?

因为这就是你所要求的。如果你想通过迭代器移动out的内容Vec,你需要使用Vec::into_iteror Vec::drain