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

时间:2019-11-27 07:28:51

标签: reference rust iterator min

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

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

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

assert_eq!(a.iter().min(), Some(&1));

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

1 个答案:

答案 0 :(得分:5)

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

您的问题还建议您也对Option感到疑惑:迭代器可能根本不产生任何项目。在这种情况下,min()没有值,并且返回None