共享,借用Vec上的iter()和into_iter()之间的区别?

时间:2015-08-26 19:17:48

标签: iterator rust shared

我正在阅读Rust 101 tutorial,其中作者讨论了共享借用与传递给函数的values(substr(timestamp(current timestamp),1,16))对象的示例。下面是教程正在教授的略微改进的MWE。有趣的部分是Vec中的v.iter()。作者写道:

  

这一次,我们显式请求了向量vec_min的迭代器。方法v借用它所处理的向量,并提供元素的共享借用。

但是如果我在共享的对象上使用iter构造会发生什么?根据{{​​3}},此隐式for循环使用for ... in ...,取得into_iter()的所有权。但它不能真正取得v在该函数中的所有权,因为它只是从它开始借用它,对吗?

有人可以解释应用于借用对象的vinto_iter()之间的差异吗?

iter()

1 个答案:

答案 0 :(得分:9)

  

但它不能真正取得该函数中v的所有权,因为它只是从它开始借用

绝对可以取得v的所有权,因为那是&Vec。请注意这里的精确语义 - 您将获取参考的所有权,而不是所引用项目的所有权。

如果您查看implementors of IntoIterator,则可以找到:

impl<'a, T> IntoIterator for &'a Vec<T>

source for that

impl<'a, T> IntoIterator for &'a Vec<T> {
    fn into_iter(self) -> slice::Iter<'a, T> {
        self.iter()
    }
}

惊喜 - 它呼叫iter!所以你的问题的答案是:没有区别。