为什么 `FromIterator` 的实现使用 `IntoIterator` 而不是 `Iterator`?

2024-02-23

的示例实现FromIterator特质在Rust 文档 https://doc.rust-lang.org/std/iter/trait.FromIterator.html is:

impl FromIterator<i32> for MyCollection {
    fn from_iter<I: IntoIterator<Item=i32>>(iter: I) -> Self {
        let mut c = MyCollection::new();

        for i in iter {
            c.add(i);
        }

        c
    }
}

FromIterator定义如何从迭代器创建类型。的签名from_iter需要一个实现的类型IntoIterator,它定义了如何将类型转换为Iterator.

Is from_iter这样定义是因为IntoIterator的要求并不像Iterator?


Is from_iter这样定义是因为IntoIterator的要求并不像Iterator?

Yes.

IntoIterator自动实现为Iterator,因此实现的类型集IntoIterator是那些实现的超集Iterator.

在设计通用函数时,最好尽量减少其要求,即使其尽可能通用。

当然,两者之间需要权衡:

  • 使用方便:适用于尽可能多的类型,
  • 易于实施.

对于孤立的代码库中的一个单独的函数,可能不值得为了易用性而进行太多优化;对于标准库中的特征/功能,由于用户数量远远超过(该特定部分的)开发人员数量,因此权衡强烈支持易用性。

自从从IntoIterator to Iterator非常简单,因此对实现影响不大,调用起来很容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 `FromIterator` 的实现使用 `IntoIterator` 而不是 `Iterator`? 的相关文章

随机推荐

  • CFHTTPMessageAddAuthentication 无法向请求添加身份验证数据

    我正在尝试扩展功能SocketRocket https github com square SocketRocket图书馆 我想添加身份验证功能 由于该库正在使用CFNetwork CFHTTPMessage API https devel
  • 如何在离线服务器上安装 npm -g

    我需要在离线服务器上安装 全局 npm 应用程序 安装普通应用程序很容易 npm install 然后打包生成的文件 手动或使用npm pack 但是 如何安装全局应用程序 具有某种安装脚本 例如forever没有互联网 npm insta
  • 在同一个 R markdown 页面中应用多列划分

    我想如图所示分割我的 Rmarkdown 文档 第一部分为一列 其他部分为两列 used onecolumn and twocolumn但每个部分都是在单个页面中创建的 有解决办法吗 This article https journals
  • 如何在jquery中获取tinymce内容?

    我正在尝试获取tinymce数据 但收到tinyMCE未定义错误 这是我的代码 function savePost console log jQuery wp tinymce editor tinyMCE getContent 请检查 Ti
  • 使用 knockout js 和 jquery ui 滑块

    我试图弄清楚knockout js是否可以很好地解决以下问题 我有多个滑块想要链接到文本框 当文本框更改时 相应的滑块必须更新为新值 反之亦然 更改滑块值或文本框时 需要调用一个函数 该函数使用所有文本框的输入来计算结果 我有我的快速但肮脏
  • 从 Google App Engine (Java) 将文件上传到 Google 云存储

    如何将文件从谷歌应用程序引擎中的servlet上传到谷歌云存储 当我这样做时 Google 云存储不知道文件的类型 即我从 HTML 表单发送的文件 编写 HTML JavaScript 和 servlet 将文件上传到云存储的正确方法是什
  • v-dialog Vuetify 的自定义位置

    我需要在页面右下角打开一个具有一定宽度和高度的 v 对话框 但是 我不明白该怎么做 V dialog总是在页面居中 我搜索了官方文档 尝试使用CSS 但无法 有任何想法吗 Note 其他提供的解决方案并不令人满意 因为它们搞乱了转换 或者我
  • 使用exist()的Cloud firestore规则是否算作读取?

    我正在存储被阻止用户的文档集合 我通过检查电子邮件是否存在于被阻止的集合中来检查请求是否来自被阻止的用户 allow read if exists databases database documents blocked request a
  • 如何将当前cygwin目录转换为windows格式

    显示我正在使用的当前目录 pwd在 Cygwin 中运行良好 This document https cygwin com cygwin ug net using effectively html正在解释如何将 cygwin 目录转换为 w
  • 存储库是单例还是静态还是都不是?

    我有一个 ASP NET 网站 它使用域驱动设计并使用存储库进行数据库操作 我想知道单例存储库和静态存储库以及每次访问都会新增的简单存储库类的优缺点是什么 此外 如果有人可以比较并指导我使用其中的哪一个 我将不胜感激 静态和单例对于存储库模
  • Jquery 验证错误放置(单选按钮)

    我正在尝试使用 Jquery 验证插件来验证我的表单 我的大多数输入元素的右侧都会出现错误消息 但单选按钮只会给我带来麻烦 如果我没有给出 div group 类的宽度 错误消息会出现在整个页面的外部 因为我假设 div 宽度是页面的 10
  • 安装 Shield LE - 错误 6058 ...在 64 位中合并 Visual C++ 10.0 CRT

    我正在尝试编译一个安装屏蔽项目 这是一个 64 位程序 我不断收到此错误 尽管它确实编译正常并安装正常 Error 16 6058 Error merging Visual C 10 0 CRT IA64 with module ID C
  • 有没有办法在 swift 中从 utf16 数组创建字符串?

    我们知道 String utf16 提供代码单元或 String unicodeScalars 提供标量 如果我们通过删除一些元素等来操作 codeunits 和 unicodeScales 有没有办法构造回结果字符串 Swift 2 1
  • 如何更改数据类型而不导致 Haskell 重新编译?

    看完一段视频后布雷特 维克多的演讲 http vimeo com 36579366 我受到启发 编写了一个快速破解程序 该程序与他在演讲中演示的开发环境有些相似 基本上 其想法是 让应用程序在一个窗口中运行 每当在源文件中保存更改时 程序就
  • 猫鼬和 q 承诺

    我正在使用 mongoose q Promise 框架示例here https gist github com 2660323 但在尝试使用 findOne 时 nfbind 似乎存在一些问题 主要是因为来自Q https github c
  • 如何正确使用文件映射并将数据传递给子进程?

    我的应用程序正在执行另一个进程 更新程序 我想将大数据 可能是一条记录 从我的应用程序传递到update程序 使用命令行传递数据参数不是一个选项 因为数据太大 而且数据大小可能会有所不同 How to 正确地 create CreateFi
  • Python 网页抓取:BeautifulSoup 未显示所有 html 源内容

    我对网络抓取和Python还很陌生 我正在尝试制作一个脚本来获取最后的交易价格但当我用 python 请求时 一些内容似乎丢失了 我之前制作过从其他网站成功获取数据的脚本 但我似乎无法让我的代码在该网站上运行 到目前为止 这是我的代码 fr
  • 如何在 Shared Worker 中运行 EventSource?

    我实施了服务器发送的事件 https developer mozilla org en US docs Server sent events Using server sent events接收来自服务器的消息 我描述了我是如何实现它的另一
  • 如何避免这个 NullPointerException

    我正在开发一个小型街机视频游戏 我希望使用双缓冲来改进动画 我有一个类应该绘制空白图像 另一个类应该绘制一条简单的线条 但是 我不断在应该绘制线条的线条上收到 NullPointerException class Render extend
  • 为什么 `FromIterator` 的实现使用 `IntoIterator` 而不是 `Iterator`?

    的示例实现FromIterator特质在Rust 文档 https doc rust lang org std iter trait FromIterator html is impl FromIterator