使用纤程简化枚举器4:过滤元素

使用纤程简化枚举器4:过滤元素

作者:BlogUpdater |  时间:2022-02-28 |  浏览:1280 |  评论已关闭 条评论

关于枚举的一种高级玩法叫做”元素过滤”,什么意思呢?就是说一个枚举器获取另一个枚举器的输出并删除一些元素。

在基于生产者驱动的枚举器中,你可以通过替换一个新的回调函数来实现过滤,该回调函数代表客户端响应过滤元素的回调,并将未过滤的元素的回调转发给客户端。

在基于消费者驱动的枚举器中,你将通过将枚举器包装在另一个枚举器中来实现组合,该枚举器驱动内部枚举器并转发它希望调用者看到的元素。

基于纤程的枚举器的行为,更像是一种消费者驱动的枚举器,但状态管理更为容易。

让我们编写一个过滤器枚举器,它删除所有目录并禁止递归到它们,如下图所示:

为了从这个过滤的枚举器中生成元素,我们运行真正的枚举器 (m_e) 并删除所有目录,防止它们被传播到过滤器的消费者,并且只是对真正的枚举器响应“跳过它”这个动作。

你还可以使用我们过去几天一直使用的相同 TestWalk 函数来测试这个过滤后的枚举器。 你需要做的就是对main 函数做一些小改动,如下图所示:

请大家仔细观察一下,就会发现:程序不再递归到子目录。 它只是计算当前目录中文件的大小。

下一次我们将会关注的主题是:组合。

总结
枚举器上进行过滤这种玩法,我觉着吧,这事儿,越来越有意思了哈。

最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Using fibers to simplify enumerators, part 4: Filtering》

最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

标签:

评论已关闭。