【问题标题】:In Rust, why does std::iter::Iterator's min function return a reference?在 Rust 中,为什么 std::iter::Iterator 的 min 函数返回一个引用?
【发布时间】:2019-11-27 07:28:51
【问题描述】:

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

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

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

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

为什么结果是对包裹在 Option 类型中的值 1 的引用而不是文字值 1?最近这个小细节让我大跌眼镜。我发现我必须在解包后取消引用结果,然后才能在数学运算中使用它。

【问题讨论】:

    标签: reference rust iterator min


    【解决方案1】:

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

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

    【讨论】:

    • 请注意,a.into_iter() 拥有a 的所有权。对于整数值,您还可以使用 a.iter().copied() 获得一个拥有的值,这使您可以在之后继续使用 a
    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2023-02-01
    • 2020-10-24
    相关资源
    最近更新 更多