如何编写带有迭代器的 Rust 函数?

2023-11-21

我想编写一个接受迭代器并返回对其进行某些操作的结果的函数。具体来说,我试图迭代 a 的值HashMap:

use std::collections::HashMap;

fn find_min<'a>(vals: Iterator<Item=&'a u32>) -> Option<&'a u32> {
    vals.min()
}

fn main() {
    let mut map = HashMap::new();
    map.insert("zero", 0u32);
    map.insert("one", 1u32);
    println!("Min value {:?}", find_min(map.values()));
}

可惜:

error: the `min` method cannot be invoked on a trait object
 --> src/main.rs:4:10
  |
4 |     vals.min()
  |          ^^^

error[E0277]: the trait bound `std::iter::Iterator<Item=&'a u32> + 'static: std::marker::Sized` is not satisfied
 --> src/main.rs:3:17
  |
3 | fn find_min<'a>(vals: Iterator<Item = &'a u32>) -> Option<&'a u32> {
  |                 ^^^^ `std::iter::Iterator<Item=&'a u32> + 'static` does not have a constant size known at compile-time
  |
  = help: the trait `std::marker::Sized` is not implemented for `std::iter::Iterator<Item=&'a u32> + 'static`
  = note: all local variables must have a statically known size

error[E0308]: mismatched types
  --> src/main.rs:11:41
   |
11 |     println!("Min value {:?}", find_min(map.values()));
   |                                         ^^^^^^^^^^^^ expected trait std::iter::Iterator, found struct `std::collections::hash_map::Values`
   |
   = note: expected type `std::iter::Iterator<Item=&u32> + 'static`
              found type `std::collections::hash_map::Values<'_, &str, u32>`

如果我尝试通过引用传递,我会得到同样的错误;如果我使用Box,我收到终身错误。


您想在这里使用泛型:

fn find_min<'a, I>(vals: I) -> Option<&'a u32>
where
    I: Iterator<Item = &'a u32>,
{
    vals.min()
}

特征可以通过两种方式使用:作为类型参数的边界和特征对象。这本书Rust 编程语言有一个章节是关于traits和一章关于特质对象这解释了这两个用例。

此外,您经常想要采取一些实现IntoIterator因为这可以使调用函数的代码更好:

fn find_min<'a, I>(vals: I) -> Option<&'a u32>
where
    I: IntoIterator<Item = &'a u32>,
{
    vals.into_iter().min()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写带有迭代器的 Rust 函数? 的相关文章

随机推荐

  • 无法使用bundle exec找到rake

    当我尝试执行 捆绑执行耙任何东西 我收到错误 Could not find rake 10 1 0 in any of the sources Run bundle install to install missing gems 但是当我执
  • 线程化 Delphi ADO 查询

    我有一个查询代码 每次需要从数据库获取数据时都可以调用它 并且我希望它是线程化的 不知道如何在线程中实现此代码 以便我可以重用此代码 基本上 我希望此代码在线程中 我知道如何在线程内创建一个简单的数据库查询 但想要一些可以重用的东西 谁能指
  • JavaScript获取url段和参数

    我读过一些问题 但我仍然不知道该怎么做我有一个网址example com event 14aD9Uxp p 10 在这里我想得到14aD9Uxp和 p 的值我尝试过使用split p 但这不起作用我想使用正则表达式 但我不太明白如何使用它
  • 在桌面上运行时如何将 Windows 10 通用应用程序的窗口最大化至全屏?

    使用 Windows 10 或 Windows 8 1 WinRT 构建通用应用程序时 是否可以强制应用程序的主窗口在启动时最大化 这显然是应用程序在移动设备上运行时的自然行为 但在桌面上运行时则不然 使用 WinForms 这当然是可能的
  • 在 Spring Boot 中使用 Angular 启用 Cors,仍然存在 Cors 错误

    我为所有来源和标头启用了 cors 但当我调用 a 时 我仍然收到 cors 错误get从我的角度应用程序到 Spring Boot 的方法 来自控制台的 Cors 错误 Access to XMLHttpRequest at http l
  • 返回任务是否违反了 CQS 原则?

    CQS 原则 https en wikipedia org wiki Command E2 80 93query separation 指出命令应返回 void 对于异步方法的建议是永远不要返回 void https msdn micros
  • 将任何 XML 文档绑定到 WPF TreeView

    我想使用 TypeConverter 将任何 XML 文档绑定到 WPF TreeView 我最初的解决方案是使用递归 但是当文档很大时 UI 就会严重依赖 以下链接讨论了 TypeConverter 但针对特定的节点 元素组合 http
  • 使用 FileReference 下载时丢失扩展名

    我需要用户从我的应用程序下载 JPEG 文件 但是 当用户更改文件名时 将下载保存的文件 不带扩展名 例如 我正在使用 FileReference download 并将默认文件名设置为 demoPic jpg 并且用户的 Windows
  • “@android:drawable/ic_”与“@*android:drawable/ic_”

    有人知道在哪里可以找到有关星号的文档吗 它似乎覆盖了子类 android R drawable 中 私有 变量的保护 android 用于访问私有资源 这些资源可能会在两个 Android 版本之间更改或删除 因此您永远不应该使用它们 这仅
  • 将所有 Neo4J 数据库加载到 RAM

    我正在尝试将所有 Neo4j DB 加载到 RAM 以便查询速度更快 当将属性映射传递到图形创建时 我没有看到该过程像以前那样占用更多的内存空间 而且它也与磁盘上的文件空间不成比例 可能是什么问题呢 以及如何修复它 谢谢 Neo4j 延迟加
  • 删除 Dask 中的空分区

    从 CSV 加载数据时 某些 CSV 无法加载 从而导致分区为空 我想删除所有空分区 因为某些方法似乎不适用于空分区 我尝试过重新分区 其中 例如 repartition npartitions 10 有效 但大于此值仍可能导致空分区 实现
  • Babel 6 regeneratorRuntime 未定义

    我正在尝试在 Babel 6 上从头开始使用 async await 但我得到了regeneratorRuntime没有定义 babelrc 文件 presets es2015 stage 0 package json 文件 devDepe
  • 如何测试 Spring 集成

    我是 Spring 集成的新手 我有 ActiveMQ 有一个 responseQ 因此 当消息到达 responseQ 时 gt painResponseChannel gt Transformer gt processResponseC
  • 获取执行jpql查询后更新的记录数

    如何在执行 jpql 查询后获取更新的记录数 例如 UPDATE Device d SET d name Name WHERE d locationId id Modifying Query UPDATE Device d SET d na
  • 如何阻止 jQuery mobile 的自动页面样式化?

    jQuery Mobile 在加载时自动向页面上的所有元素添加类 这确实弄乱了我页面上的 jQuery UI 小部件 有没有办法阻止 jQuery mobile 自动向我的 HTML 元素添加类 我只想在我的页面上显示一些 jQuery 移
  • MouseBinding 上的 WPF 键盘修饰符

    我正在 WPF 中使用 MVVM 模式 对两者来说都有点新 我想设立一个InputBinding on a CheckBox对应于一个Control Click事件 但没有看到Modifiers财产在MouseBinding元素 这就是我想
  • RabbitMQ - 使用curl从队列中获取消息

    我正在尝试使用rabbitmq的HTTP API从队列中获取一些消息 我正在关注中的文档here我没有vhost配置 我尝试了以下curl命令 curl i u guest guest H content type application
  • 使用QSignalMapper时如何保留源信号的参数?

    我遇到了一个问题 我需要保留映射的源信号的参数 到目前为止 我只找到了没有任何参数的映射信号的示例 例如 clicked 信号 signalMapper new QSignalMapper this signalMapper gt setM
  • 如何使用 Devise Authentication 来验证注册电子邮件地址是否来自特定域?

    我想确保只有具有特定域的电子邮件地址的人才能注册使用 Devise 的网站 例如 如果人们使用电子邮件注册 电子邮件受保护 他们应该会收到一封确认电子邮件 但如果注册的是 电子邮件受保护 他们应该会收到错误消息 取消注释 config in
  • 如何编写带有迭代器的 Rust 函数?

    我想编写一个接受迭代器并返回对其进行某些操作的结果的函数 具体来说 我试图迭代 a 的值HashMap use std collections HashMap fn find min lt a gt vals Iterator