在 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
。
在 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
。