首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关闭的副作用是否在“迭代器::检查”中有明确的定义,以便可用于例如计数?

关闭的副作用是否在“迭代器::检查”中有明确的定义,以便可用于例如计数?
EN

Stack Overflow用户
提问于 2019-01-13 17:54:16
回答 1查看 335关注 0票数 4

我有一个迭代器,我想用一个很好的方法(比如Iterator::sum)来折叠它:

代码语言:javascript
运行
复制
let it = ...;
let sum = it.sum::<u64>();

然后我注意到,我还需要知道迭代器中元素的数量。我可以编写一个for循环并手动进行计数和求和,但这并不好,因为我必须更改一个可能很长的迭代器适配器链以及所有这些。此外,在我的实际代码中,我不使用sum,而是一种更复杂的“折叠方法”,我不想复制这种方法的逻辑。

我有主意使用Iterator::inspect

代码语言:javascript
运行
复制
let it = ...;
let mut count = 0;
let sum = it.inspect(|_| count += 1).sum::<u64>();

这行得通,但是是偶然工作的还是这种行为是有保证的呢?文档中的inspect提到每个元素都会调用闭包,但也指出它主要用作调试工具。我不确定在生产代码中以这种方式使用它是否是个好主意。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-13 18:30:28

我想说它是有保证的,但是你永远不会发现它是这样明确地声明的。正如你提到的,文件说明

对迭代器的每个元素执行一些操作,传递值。

由于函数保证为每个元素运行闭包,而语言保证在运行闭包时会发生什么(根据闭包的定义),所以行为是安全的。

尽管如此,一旦您有了一个或多个副作用,也许最好避免沉重的链接,转而使用乏味的for循环来提高可读性,但这将取决于具体情况。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54171609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档