我将使用 C# 语法,因为我熟悉它,但它并不是真正特定于语言的。
假设我们想提供一个 API 来检查 a
Tree
并对每个Node
.
解决方案 1:void Visit(Tree tree, Action<Node> action)
它需要一个tree
, 并调用action
树中的每个节点。
解决方案 2:IEnumerable<Node> ToEnumerable(Tree tree)
它转换tree
为一个扁平的惰性序列,这样我们就可以遍历并调用action
每个节点。
现在,让我们看看如何将一种 API 转换为另一种。
Visit
在以下基础上提供非常简单ToEnumerable
:
void Visit(Tree tree, Action<Node> action) {
ToEnumerable(tree).ForEach(action);
}
但是,是否有任何语言的概念/功能可以提供ToEnumerable
(Visit
作为惰性序列,因此不会提前创建列表)?