在Rust中,为什么std :: iter :: Iterator的min函数返回引用?

dyn*_*eed 2 iterator reference min rust

在Rust中,为什么std :: iter :: Iterator的min函数返回引用?

从上面链接的文档页面获取以下示例:

let a = vec![1, 2, 3];

assert_eq!(a.iter().min(), Some(&1));
Run Code Online (Sandbox Code Playgroud)

为什么结果引用的是1包装在Option类型中的值而不是文字值1?这个小细节最近使我震惊。我发现必须先解开结果,然后才能在数学运算中使用它。

use*_*968 5

技术上讲,它不会:min()返回一个Option<Self::Item>地方Self是Iterator。也就是说,min()返回任何迭代器产生的结果。由于迭代器是通过.iter()在上创建的Vec,因此您会在引用上获得一个迭代器,因此会min()返回一个引用。如果使用,a.into_iter().min()您将获得拥有的价值。

您的问题表明您也想知道以下内容Option:迭代器可能根本不产生任何项目。在这种情况下,min()没有值并None返回。

  • 注意,`a.into_iter()`拥有`a`的所有权。对于整数值,您还可以使用[`a.iter().copied()`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method。复制),使您以后可以继续使用`a`。 (2认同)