Luk*_*odt 6 iterator side-effects rust
我有一个迭代器,我想用一个很好的方法折叠它(比如说Iterator::sum):
let it = ...;
let sum = it.sum::<u64>();
Run Code Online (Sandbox Code Playgroud)
然后我注意到我还需要知道迭代器中元素的数量。我可以编写一个for循环并手动进行计数和求和,但这并不好,因为我必须更改可能很长的迭代器适配器链以及所有这些。此外,在我的真实代码中,我没有使用sum,而是使用更复杂的“折叠方法”,我不想复制该逻辑。
我有一个想法(ab)使用Iterator::inspect:
let it = ...;
let mut count = 0;
let sum = it.inspect(|_| count += 1).sum::<u64>();
Run Code Online (Sandbox Code Playgroud)
这是可行的,但它是巧合还是这种行为有保证?的文档inspect提到每个元素都会调用闭包,但也指出它主要用作调试工具。我不确定在生产代码中以这种方式使用它是否是一个好主意。