如何在Dart中创建递归生成器?

时间:2018-09-20 06:06:10

标签: dart flutter

例如,我想编写一个生成器来迭代一棵树。我可以使用递归函数调用吗?

Iterator<node> forallchildren(node) {
    for (var n in node.children) {
       yield n;
       forallchildren(n);
    }
}

看起来像递归调用只会生成迭代器,而不会像遍历树一样起作用。 有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

如果您将函数标记为yield,则只能在返回Iterable(而不是Iterator)的函数中使用sync*

此外,要从Iterable中产生元素,必须使用yield*

所以您可以像这样编写代码:

Iterable<Node> forallchildren(Node node) sync* {
    for (var n in node.children) {
       yield n;
       yield* forallchildren(n);
    }
}