簡體   English   中英

如何在Dart中創建遞歸生成器?

[英]How can I create recursive generator in dart?

例如,我想編寫一個生成器來迭代一棵樹。 我可以使用遞歸函數調用嗎?

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

看起來遞歸調用僅生成迭代器,而不像遍歷樹一樣。 有沒有更好的辦法?

如果您使用sync*標記函數,則只能在返回Iterable的函數中使用yield (而不是Iterator )。

此外,要從Iterable產生元素,必須使用yield*

因此,您可以像下面這樣編寫代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM