注意:内联迭代器上的for循环体被内联到迭代器代码中出现的每个 yield 语句中,因此理想情况下,代码应该被重构为包含单个yield,以避免代码膨胀。

    内联迭代器是二等公民; 它们只能作为参数传递给其他内联代码工具,如模板、宏和其他内联迭代器。

    闭包迭代器和内联迭代器有一些限制:

    • 目前,闭包迭代器无法在编译时执行。
    • 内联和闭包迭代器都不能递归。
    • js后端不支持闭包迭代器。 迭代器既没有标记为 {.closure.} 也不是 {.inline.} 则显式默认内联,但这可能会在未来版本的实现中发生变化。

    iterator 类型总是隐式调用约定 closure ;以下示例显示如何使用迭代器实现 协作任务 系统:

    注意使用 system.finished 容易出错,因为它只在迭代器完成下一次迭代返回 true

    而是必须使用此代码:

    闭包迭代器是 可恢复函数 ,因此必须为每个调用提供参数。 为了解决这个限制,可以捕获外部工厂proc的参数: