注意:内联迭代器上的for循环体被内联到迭代器代码中出现的每个 yield 语句中,因此理想情况下,代码应该被重构为包含单个yield,以避免代码膨胀。
内联迭代器是二等公民; 它们只能作为参数传递给其他内联代码工具,如模板、宏和其他内联迭代器。
闭包迭代器和内联迭代器有一些限制:
- 目前,闭包迭代器无法在编译时执行。
- 内联和闭包迭代器都不能递归。
- js后端不支持闭包迭代器。 迭代器既没有标记为 {.closure.} 也不是 {.inline.} 则显式默认内联,但这可能会在未来版本的实现中发生变化。
iterator 类型总是隐式调用约定 closure ;以下示例显示如何使用迭代器实现 协作任务 系统:
注意使用 system.finished 容易出错,因为它只在迭代器完成下一次迭代返回 true :
而是必须使用此代码:
闭包迭代器是 可恢复函数 ,因此必须为每个调用提供参数。 为了解决这个限制,可以捕获外部工厂proc的参数: