【问题标题】:What does Iterator::inspect() do?Iterator::inspect() 做什么?
【发布时间】:2022-01-19 15:39:03
【问题描述】:

我在其他人的一些源代码中看到了inspect(),但我不知道如何使用它。只有它的online documentation 描述不多:

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where
    F: FnMut(&Self::Item), 

对迭代器的每个元素做一些事情,传递值。

使用迭代器时,您通常会将其中的几个链接在一起。在处理此类代码时,您可能想查看管道中各个部分发生的情况。为此,请插入对 inspect() 的调用。

inspect() 被用作调试工具比存在于最终代码中更为常见,但应用程序可能会发现它在某些需要记录错误才能被丢弃的情况下很有用。

它是否打印出传递给它的值以更好地理解迭代器?

【问题讨论】:

    标签: rust iterator


    【解决方案1】:

    不,它不打印任何内容,但让您有机会这样做。 inspect 的示例用法可能是:

    let _: Vec<_> = (0..6)
            .map(|x| x * 2)
            .inspect(|x| println!("{}", x))
            .collect();
    

    在本例中inspect 仅用于调试 x 的值。 inspect 背后的意图并没有太大(你不能在迭代器中修改任何东西)。

    这在处理许多链式迭代器时非常有用(例如.map(...).filter(...).map(...).count())。

    【讨论】:

    • 所以这基本上可以帮助您,例如,在每个操作迭代所有值之后检查值,对吧?
    • 是的。但可能检查调用的顺序与您期望的不同。在此处查看示例:play.rust-lang.org/…
    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 2012-03-13
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多