【发布时间】:2018-01-18 18:43:17
【问题描述】:
我有一个 java 方法 visitChildrenRecursively(Node root, NodeVisitor p),它允许我通过提供 SAM 访问者来迭代树状结构的元素。
我想将此方法转换为基于序列的迭代。
但是,这段代码...
buildSequence {
visitChildrenRecursively(root, NodeVisitor {
yield(it)
})
}
...编译失败,在yield(it) 行出现错误Suspension functions can be called only within coroutine body
Kotlin 协程 Informal description 建议我的 visitChildrenRecursively 可以通过将其包装在 suspendCoroutine 块中来转换为挂起函数。
这是否是正确的方法,或者这甚至可能在不诉诸kotlinx 的produce 方法的情况下,如the kotlinx coroutines guide 所示?
我还尝试了非正式描述中的“异步序列”部分,但没有成功。
【问题讨论】: