在Rust中,为什么std :: iter :: Iterator的min函数返回引用?
从上面链接的文档页面获取此示例:
let a = vec![1, 2, 3];
assert_eq!(a.iter().min(), Some(&1));
为什么结果引用对包装在Option类型中的值1
而不是文字值1
的引用?这个小细节最近使我震惊。我发现必须先解开结果,然后才能在数学运算中使用它。
答案 0 :(得分:5)
从技术上讲,它不会:min()
返回一个Option<Self::Item>
,其中Self
是迭代器。也就是说,min()
返回任何迭代器产生的结果。由于迭代器是通过.iter()
上的Vec
创建的,因此您在引用上获得了迭代器,因此min()
返回了引用。如果您使用a.into_iter().min()
,则会获得拥有的价值。
您的问题还建议您也对Option
感到疑惑:迭代器可能根本不产生任何项目。在这种情况下,min()
没有值,并且返回None
。