在 Rust 中,为什么 std::iter::Iterator 的 min 函数 return 是一个引用?

In Rust, why does std::iter::Iterator's min function return a reference?

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

以上面链接的文档页面为例:

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

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

为什么结果是对包含在 Option 类型中的值 1 的引用而不是文字值 1?这个小细节最近把我绊倒了。我发现我必须在解包后取消引用结果才能在数学运算中使用它。

从技术上讲,它不是:min() returns Option<Self::Item> 其中 Self 是迭代器。也就是说,min() returns 无论迭代器产生什么。由于迭代器是通过 Vec 上的 .iter() 创建的,因此您会得到一个基于引用的迭代器,因此 min() returns 是一个引用。如果你使用 a.into_iter().min() 你会得到一个拥有的值。

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